2016-11-09 8 views
0

При запуске следующего скрипта ssh login успешно завершен, и я могу взаимодействовать, но он не отправляет команду cd folder. Является ли моя команда expect "$" полезной, если я точно знаю, что это первая команда, которую я хочу отправить, и как можно отправить команду cd folder?Ожидайте, что скрипт не отправляет команды после успешного входа в систему ssh

Вот короткий ожидать сценарий:

#!/usr/bin/expect 
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected] 
expect "password" 
send "mypassword\r" 
expect "$" 
send "cd folder\r" 
interact 

Спасибо!

ответ

2

Вам необходимо указать expect более конкретное приглашение командной строки.

Согласно руководство ожидать'S:

Обратите внимание, что во многих редакторах, то ^ и $ матч начало и конец строки соответственно. Тем не менее, поскольку ожидается не ориентированный на линию, эти символы соответствуют началу и концу данных (в отличие от строк) в настоящее время в буфере соответствия ожидания.

0

Вы должны создать ключи SSH с помощью ssh-keygen (или как this), и обратитесь к администратору сервера, чтобы добавить свой открытый ключ ~/.ssh/authorized_keys на сервере. Затем вы сможете войти на удаленную машину, не указав пароль. В противном случае любой, у кого есть доступ к скрипту, сможет получить доступ к удаленному серверу от вашего имени! В этой связи есть good discussion.

С сконфигурированных клавиш, вы можете просто

ssh [email protected] -- 'cd folder; # whatever' 

или, используя here document синтаксис:

#!/bin/bash - 
ssh -tt [email protected] <<'EOC' 
cd folder 
# do something else 
exit 
EOC 

Отметим, что первый вариант -t сил псевдо-терминала распределения. Несколько -t опции force tty распределение, даже если ssh не имеет локальных tty.

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

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