Открыть 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" как специальные символы.

Другие вопросы по тегам