открыть telnet с помощью оболочки и передачи команд

Я новичок в Linux и сценариях оболочки. Я хочу подключиться к локальному хосту и взаимодействовать с ним.

 #! /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")

Мне приходит много текста. Вручную я не могу выполнить эту команду синтаксического анализа для каждого предложения. поэтому я хочу автоматизировать. Поэтому мне нужно написать скрипт для подключения к серверу и взаимодействия.

Любые ориентиры. Наконец, как взаимодействовать/отправлять команды в эту коварную оболочку?


person vishnu    schedule 07.11.2016    source источник
comment
Что значит Но что-то не получилось. на самом деле имеется в виду? Что случается? Будьте точны...   -  person arkascha    schedule 07.11.2016
comment
Есть ли причина, по которой вам нужно запускать первый скрипт в подоболочке?   -  person Inian    schedule 07.11.2016
comment
И использование (exec) в сценариях оболочки обычно не требуется. Вы делаете это из-за особого случая или потому, что привыкли к этому cmd на python или другом языке? Но даже если вы уберете это, этот пример мало что даст. Заставьте все работать из командной строки. Может быть, вам нужно запустить сервер в фоновом режиме с /path/to/server -opts x y z file &? Затем посмотрите, отвечает ли он на порту на соединение telnet. Удачи.   -  person shellter    schedule 07.11.2016
comment
@шелтер. да, вручную я мог подключиться к серверу. оно работает!! Но после этого мне нужно повторно выдавать определенные команды. Я хочу автоматизировать. Как взаимодействовать с этой хитрой оболочкой?   -  person vishnu    schedule 07.11.2016
comment
@Inian: я могу запустить вручную. Но после этого я хочу повторно отправить команду синтаксического анализа на сервер. Как взаимодействовать с этой хитрой оболочкой?   -  person vishnu    schedule 07.11.2016
comment
@arkascha: я отредактировал вопрос.   -  person vishnu    schedule 07.11.2016
comment
telnet не открывает другое окно, это консольное приложение. Взгляните на ожидания.   -  person Stefan Hegny    schedule 07.11.2016


Ответы (2)


Один из способов войти на сервер linux под тем же или другим пользователем и запустить какую-либо команду или сценарий .sh (очень полезный для перехватчиков после фиксации или заданий cron) — это использовать программу под названием sshpass, например команда cron job или хук post-commit svn будет выглядеть так:

/usr/bin/sshpass -p 'password' /usr/bin/ssh 
-o StrictHostKeyChecking=no  -q user@localhost 'any command'

Просто замените пароль своим паролем, а пользователя своим пользователем и введите команду, которую вам нужно запустить от имени этого конкретного пользователя...

Чтобы установить sshpass на Ubuntu, просто введите

apt-get install sshpass

Или на CentOS

yum install sshpass
person Aleksandar Pavić    schedule 07.11.2016

Я решил это с помощью команды netcat (nc).

  $ echo "command1\ncommand2\n" | nc localhost xxxxx

Я мог бы вручную подключиться к локальному хосту, используя telnet localhost xxxx, а затем я мог бы передавать команды из оболочки на локальный хост, как это.

person vishnu    schedule 07.11.2016
comment
Это может не работать в зависимости от сервера, потому что протокол TELNET не является простым текстом через TCP (клиент и сервер обмениваются некоторой информацией во время установки соединения). Я не знаю ни одного флага nc для автоматической поддержки этого. Таким образом, telnet работает лучше, чем nc, но поскольку он плохо обрабатывает свой стандартный ввод, как это делает nc, expect является хорошим инструментом для запуска telnet с правильной обработкой ввода/вывода. - person André Sassi; 07.11.2016