Скрипт для входа в SSH дважды

Скрипт для входа в 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"

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

решение1

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

#!/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.

решение2

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

решение3

Поиск генерации ключей ssl. Вы генерируете пару ключей (открытый и закрытый), сохраняете закрытый ключ(и), которые вы генерируете, в своей системе, и размещаете открытые ключи в системах, к которым вам нужно получить доступ через 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

Связанный контент