Сценарий для входа в 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 
  • Как обновить хром (F5) из сценария оболочки в debian (альтернатива xdotool)
  • Как получить доступ к моей локальной сети из любого места через ssh?
  • Разрешить постоянным пользователям SSH использовать закрытый ключ, который они не могут прочитать.
  • gvfs-mount не будет монтировать хост ssh, указанный в config
  • Проблема с несколькими файлами, связанными с SSH-соединениями
  • Google Cloud, Gnome через SSH
  • Как выполнить удаленную команду для существующей сессии ssh
  • Linux: $ SSH_CONNECTION устанавливается даже без SSHing на сервер
  • SSH соединение с малиной Pi: соединение отказано
  • Создайте пользователя, который может подключаться только к определенному каталогу
  • Ошибка sshfs: сброс соединения с помощью сверстника
  • Linux и Unix - лучшая ОС в мире.