Script para fazer login no ssh duas vezes

Script para fazer login no ssh duas vezes

Preciso fazer login sshduas vezes com um script e não consigo fazê-lo funcionar. Isto é o que tenho no meu arquivo de script:

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

mas isso falha com o erro:

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

Se eu mudar a linha spawn ssh $addr2, exec ssh $addr2ela falhará com o erro:

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

O que preciso mudar para que isso funcione?

Responder1

Postando minha própria resposta desde que encontrei uma maneira de contornar esse problema. Aqui está o script que realmente funciona:

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

Então basicamente substituí a linha spawn ssh $addr2por send "ssh $addr2\r". Eu estava tentando gerar outro ssh de onde comecei, em vez de iniciar outro ssh no host para o qual fiz o ssh pela primeira vez.

Responder2

sshnão consegue resolver o nome do host que você está fornecendo e, portanto, ocorre um erro. Você está dizendo para esperar enviar a senha, mas não há nada para onde enviá-la, pois o ssh gerou o erro e saiu. Então você precisa verificar o nome do host que está fornecendo, pois não está resolvendo. Ou você pode mudar para um endereço IP. Mas provavelmente é melhor descobrir por que não consegue descobrir quem é "address2".

Responder3

Geração de chave SSL de pesquisa. Você gera um par de chaves (públicas e privadas), mantém as chaves privadas geradas em seu sistema e coloca as chaves públicas nos sistemas que você precisa acessar por meio de ssh. Então o ssh não solicita a senha e você não precisa esperar.

Aqui está um script, "sskkeygen.sh", que uso para gerar chaves, para poder gerar diferentes pares de chaves para diferentes sistemas,

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

Copie a chave ~/.ssh/id_dsa.$SYSTEM.pub para o sistema remoto. Tenha cuidado - todas as instruções dizem para copiar o arquivo-chave, mas você deseja anexá-lo!

Então você precisa de um arquivo ~/.ssh/config que informa quais chaves usar para quais hosts.

#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

informação relacionada