Сценарий для входа в ssh дважды

Мне нужно войти через ssh дважды со сценарием и не может заставить его работать. Это то, что у меня есть в файле сценария:

 #!/usr/bin/expect set login "user" set addr "address1" set addr2 "address2" set pw "password" spawn ssh $login@$addr expect "$login@$addr\'s password:" send "$pw\r" expect "$login@host:" spawn ssh $addr2 expect "$login@$addr\'s password:" send "$pw\r" interact 

но это не с ошибкой:

 user@host:~$ ssh: Could not resolve hostname address2: Name or service not known send: spawn id exp7 not open while executing "send "$pw\r"" 

Если я изменю строку spawn ssh $addr2 с exec ssh $addr2 это не с ошибкой:

 user@host:~$ ssh: Could not resolve hostname address2: Name or service not known while executing "exec ssh $addr2" 

Что мне нужно изменить, чтобы сделать эту работу?

3 Solutions collect form web for “Сценарий для входа в ssh дважды”

ssh не может разрешить имя хоста, которое вы ему даете, и поэтому он не работает. Затем вы говорите, что хотите отправить пароль, но отправлять его не нужно, поскольку ssh выкинул ошибку и ушел. Поэтому вам нужно проверить имя хоста, которое вы ему даете, поскольку оно не разрешается. Или вы можете переключиться на IP-адрес. Но, вероятно, лучше узнать, почему он не может понять, кто «адрес2».

Вывод моего собственного ответа, так как я нашел способ решить эту проблему. Вот сценарий, который действительно работает:

 #!/usr/bin/expect set login "user" set addr "address1" set addr2 "address2" set pw "password" spawn ssh $login@$addr expect "$login@$addr\'s password:" send "$pw\r" expect "$login@host:" send "ssh $addr2\r" expect "$login@$addr\'s password:" send "$pw\r" interact 

Поэтому в основном я заменил строку spawn ssh $addr2 на send "ssh $addr2\r" . Я пытался создать еще один ssh из того места, где я начал, а не запускать другой ssh ​​на хосте, с которым я сначала ssh'd.

Поиск ключа ssl key. Вы создаете пару ключей (общедоступных и частных), вы сохраняете секретный ключ (ключи), который вы создаете в своей системе, и размещаете открытые ключи в системах, которые вам нужны для доступа через ssh. Тогда ssh не запрашивает пароль, и вам не нужно ждать.

Вот сценарий «sskkeygen.sh», я использую для генерации ключей, поэтому я могу генерировать различные ключевые пары для разных систем,

 #!/bin/bash SYSTEM=${1:-boogie} COMMENT=${2:-"Key for $SYSTEM work"} ssh-keygen -t dsa -f ~/.ssh/id_dsa.$SYSTEM -C "$COMMENT" chmod 600 ~/.ssh/id_dsa.$SYSTEM chmod 600 ~/.ssh/id_dsa.$SYSTEM.pub 

Скопируйте ключ ~ / .ssh / id_dsa. $ SYSTEM.pub в удаленную систему. Будьте осторожны – все инструкции говорят о копировании ключевого файла, но вы хотите добавить его!

Тогда вам понадобится файл ~ / .ssh / config, который сообщает, какие ключи использовать для каких хостов.

 #key: prod Host 1.2.3.4 IdentityFile ~/.ssh/id_dsa.prod User meself #key: dev/test Host 2.3.1.4 IdentityFile ~/.ssh/id_dsa.dev User meself #key: ftp dropbox Host dropbox.company.com IdentityFile ~/.ssh/id_dsa.dropbox User virtualuser #key: ftp thing Host aaa.bbb.thing.com IdentityFile ~/.ssh/id_dsa.think User neato #key: work Host *.work.com IdentityFile ~/.ssh/id_dsa.work User workid 
  • Все еще получать запрос пароля с помощью ssh с аутентификацией с открытым ключом?
  • Не удается подключиться к ssh-серверу
  • SSH: «Permission denied» после изменения оболочки пользователя
  • Имитировать рабочий стол через SSH?
  • Запуск ssh из тюрьмы chroot в SuSE
  • `ssh -X` запрашивает определенный X-дисплей?
  • Как перемещать файлы между серверами с помощью проверки подлинности PubKey?
  • ssh запрашивает пароль, несмотря на ssh-copy-id
  • как ssh обнаруживает имена хостов в сети?
  • Предоставление дополнительных дескрипторов вызывающему сценарию
  • ssh to localhost не работает, удаленные ssh works
  • Linux и Unix - лучшая ОС в мире.