Открыть telnet с помощью оболочки и передачи команд
Я новичок в Linux и сценариев оболочки. Я хочу подключиться к localhost и взаимодействовать с ним.
#! /bin/bash
(exec /opt/scripts/run_server.sh)
когда я выполняю этот скрипт bash, он начинает слушать порт.
Listening on port xxxxx
Теперь я хочу выполнить эту команду "telnet localhost xxxxx" Я попробовал что-то вроде этого:
#! /bin/bash
(exec /opt/opencog/scripts/run_server.sh)&&
telnet localhost xxxxx
Он все еще слушает в порту. Но я думаю, что вторая команда не работает. Я ожидаю другое окно, показывающее, что оно подключается вот так.
vishnu@xps15:~$ telnet localhost xxxx
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
server>
Причина, по которой я выполняю их как скрипт, заключается в том, что автоматически на сервере мне нужно выполнить какой-то процесс, выполнив определенные команды, такие как "scm", "parse" и т. Д.
vishnu@xps15:~$ telnet localhost xxxx
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
server>scm
Entering scheme shell; use ^D or a single . on a line by itself to exit.
guile> (parse "i eat apple")
У меня много текстов. Вручную я не могу выполнить эту команду разбора для каждого предложения. поэтому я хочу автоматизировать. Поэтому мне нужно написать скрипт для подключения к серверу и взаимодействия.
Любые рекомендации. Наконец, как взаимодействовать / отправлять команды в эту оболочку guile?
3 ответа
Один из способов войти на сервер Linux под тем же или другим пользователем и запустить некоторую команду или скрипт.sh (очень полезный для перехватов после фиксации или заданий cron) - это использовать программу с именем sshpass, например команду задания cron или сообщение svn post Крюк -commit будет выглядеть так:
/usr/bin/sshpass -p 'password' /usr/bin/ssh
-o StrictHostKeyChecking=no -q user@localhost 'any command'
Просто замените пароль своим паролем, а user - вашим пользователем, и введите команду, которую нужно запустить от имени этого конкретного пользователя...
Чтобы установить sshpass на Ubuntu, просто наберите
apt-get install sshpass
Или на CentOs
yum install sshpass
Я решил это с помощью команды netcat (nc).
$ echo "command1\ncommand2\n" | nc localhost xxxxx
Я мог бы вручную подключиться к localhost, используя telnet localhost xxxx, а затем я мог передавать команды от оболочки к localhost, как это.
Если вам нужно использовать telnet, это решение может вам помочь. В противном случае используйте ssh, как предлагает другой ответ.
Вы можете использовать все, что производит вывод, чтобы писать строки одну за другой, за которыми следует "\r\n", и передавать эти строки в
ncat
, например:
echo -e "command1\r\ncommand2\r\n" | ncat localhost 5000
-e
вариант делает
echo
интерпретировать "\r\n" как специальные символы.