Итак, я создал небольшой пример:
#!/bin/bash
while read -p 'Tell me your name: ' ln;
do
echo "I got $ln";
done
Итак, вы сохраняете скрипт, делаете его исполняемым и запускаете следующим образом:
На сервере
nc -l -p 4444 -k --sh-exec./yourscript
Здесь -k
сохраняет соединение открытым, поэтому нет необходимости в петле, которую вы там получили.
На клиенте
nc hostname 4444
foo bar
Это должно сработать.
Кажется, открыто -BSD netcat не поддерживает команды -e
или --exec
, которые помогают нам выполнить файл после установления соединения. Поскольку это может привести к тому, что удаленная машина запустит потенциально опасную команду для подключенной машины, эти команды считаются опасными.
В качестве обходного пути я просто удалил Open -BSD netcat и установил традиционный сервер -netcat, следуя решению на сайтеhttps://stackoverflow.com/questions/10065993/how-to-switch-to-netcat-traditional-in-ubuntu. Это дало мне доступ к команде exec -. Команда, которую я запускаю на сервере: :nc -l -p порт -номер -e Файл -Сценарий -до -выполнить