2016-11-07 13 views
0

Я новичок в linux и shell-скриптах. Я хочу подключиться к localhost и взаимодействовать с ним.open telnet с использованием команд оболочки и передачи

#! /bin/bash 
(exec /opt/scripts/run_server.sh) 

При выполнении этого сценария bash он начинает прослушивать порт.

Listening on port xxxxx 

Теперь я хочу, чтобы выдать эту команду «телнет LOCALHOST ххххх» Я пытался что-то вроде этого:

#! /bin/bash 
(exec /opt/opencog/scripts/run_server.sh)&& 
telnet localhost xxxxx 

Он по-прежнему прослушивает порт. Но я думаю, что вторая команда не работает. Я ожидаю другого окна, показывающего, что он подключается так.

[email protected]:~$ telnet localhost xxxx 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
server> 

Причина, почему я выполнения их как сценарий является то, что автоматически на сервере мне нужно выполнить некоторый процесс, выдавая определенные команды, как это «ВСМ», «разобрать» и т.д .....

[email protected]:~$ 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

Что делает «Но это не сработало». на самом деле означает? Что происходит? _Be exact ..._ – arkascha

+0

Есть ли причина, по которой вам нужно запустить первый скрипт в под-оболочке? – Inian

+1

И использование '(exec)' в сценариях оболочки обычно не требуется. Вы делаете это из-за специального случая, или потому, что вы привыкли к этому cmd в 'python' или на другом языке? Но даже если вы удалите этот пример, это не принесет больших результатов. Получите работу от cmd-линии. Возможно, вам нужно запустить сервер в фоновом режиме с помощью '/ path/to/server -opts x y z file &'? Затем посмотрите, отвечает ли он порту на telnet-соединение. Удачи. – shellter

ответ

2

Один из способов входа на сервер Linux как один и тот же или другой пользователь и запуск некоторой команды или .sh-скрипта (очень полезно для перехватов после коммита или заданий cron) - использовать программу с именем sshpass, например хрон командной работы или SVN после совершения крючок будет выглядеть следующим образом:

/usr/bin/sshpass -p 'password' /usr/bin/ssh 
-o StrictHostKeyChecking=no -q [email protected] 'any command' 

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

Для установки sshpass на ubuntu просто введите

apt-get install sshpass 

Или на CentOS

yum install sshpass 
0

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

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

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

+1

Это может не работать в зависимости от сервера, потому что протокол TELNET не является простым простым текстом через TCP (клиент и сервер обмениваются информацией во время установки соединения). Я не знаю ни одного флага 'nc', чтобы поддерживать это автоматически. Поэтому 'telnet' работает лучше, чем' nc', но поскольку он не справляется хорошо, его стандартный ввод, такой как 'nc', делает,' expect' - хороший инструмент для запуска 'telnet' с правильной обработкой ввода/вывода. –

 Смежные вопросы

  • Нет связанных вопросов^_^