Иногда может потребоваться такой алгоритм. При простом подключении telnet’ом (например по ярлыку) на определенный порт хоста, там должен выполниться скрипт. В реализации этого может помочь стандартный inetd.Конечно, можно использовать и более продвинутый xinetd, но в данной статье рассмотрим именно inetd.
Первое что необходимо сделать, это добавить имя сервиса, номер порта и протокол в файл /etc/services
Например это будет свободный TCP порт 6868 и имя сервиса myservice. Добавим в указанный выше файл строку:
myservice 6868/tcp
Допустим, скрипт, который мы хотим выполнять при обращении к порту здесь /home/myscript.sh
Добавим следующую строку в файл /etc/inetd.conf
myservice stream tcp nowait root /home/myscript.sh
Каждая значащая строка файла /etc/inetd.conf описывает сервер в семи полях (разделённых пробелами):
- Номер порта TCP или UDP или имя сервиса (которое преобразуется в стандартный номер порта с помощью информации, содержащейся в файле /etc/services).
- Тип сокета: stream для TCP-соединения, dgram для UDP-датаграмм.
- Протокол: tcp или udp.
- Опции: два возможных значения — wait или nowait, сообщающих inetd, следует ли ждать завершения запущенного процесса прежде чем принимать новое соединение. Для TCP-соединений, которые легко мультиплексируются, обычно можно использовать nowait. Для программ, отвечающих через UDP, следует использовать nowait только если сервер способен управляться с несколькими соединениями параллельно. В конце этой опции можно добавить точку, и после неё указать максимально разрешённое число сединений в минуту (по умолчанию используется ограничение в 256 соединений).
- Имя пользователя, от имени которого будет запускаться сервер.
- Полный путь к серверной программе, которую нужно запустить.
- Аргументы: полный список аргументов программы, включая её собственное имя ((argv[0] в Си).
Перезапустим службу
# service inetd restart
Проверим, слушается ли порт
# netstat -na | grep 6868
Если вывод пуст, значит где-то есть ошибка, проверяйте.
Вот и все. Теперь можно запустить на удаленной машине команду и проверить выполняется ли скрипт
# telnet 192.168.1.1 6868
Где 192.168.1.1 – это IP адрес нашего сервера с inetd.
Конечно, такая конструкция не очень безопасна (тем более, что скрипт выполняется от root). Поэтому необходимы минимальные меры предосторожности. Например, фаервол с аксеслистом. В xinetd, кстати, можно указывать, с каких IP адресов можно обращаться.