Script para acessar o ssh duas vezes

1

Eu preciso fazer o login através de ssh duas vezes com um script e não posso fazê-lo funcionar. Isso é o que eu 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 alterar a linha spawn ssh $addr2 com exec ssh $addr2 , ele 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?

    
por Gabriel 10.10.2013 / 00:12

3 respostas

4

Publicando 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 $addr2 por send "ssh $addr2\r" . Eu estava tentando gerar outro ssh de onde eu comecei, em vez de iniciar outro ssh no host que eu primeiro tinha feito.

    
por 10.10.2013 / 02:21
2

ssh não consegue resolver o nome do host que você está fornecendo e, portanto, comete erros. Então você está dizendo esperar para enviar a senha, mas não há nada para enviá-lo desde que ssh jogou o erro e sair. Então você precisa verificar o nome do host que você está dando, já que não está resolvendo. Ou você pode mudar para um endereço IP. Mas é provavelmente melhor descobrir por que não é possível descobrir quem é "address2".

    
por 10.10.2013 / 01:48
2

Geração de chave ssl de pesquisa. Você gera um par de chaves (públicas e privadas), mantém a (s) chave (s) privada (s) que você gera em seu sistema e coloca as chaves públicas nos sistemas que você precisa acessar através do ssh. Então o ssh não pede sua senha, e você não precisa esperar.

Aqui está um script, "sskkeygen.sh", que uso para gerar chaves, para que eu possa 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 tecla ~ / .ssh / id_dsa. $ SYSTEM.pub para o sistema remoto. Tenha cuidado - as instruções dizem copiar o arquivo de chaves, mas você deseja anexá-lo!

Então você precisa de um arquivo ~ / .ssh / config que diga quais teclas 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
    
por 10.10.2013 / 02:00