Necesito iniciar sesión ssh
dos veces con un script y no puedo hacerlo funcionar. Esto es lo que tengo en mi archivo 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
pero esto falla con el error:
user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
send: spawn id exp7 not open
while executing
"send "$pw\r""
Si cambio la línea spawn ssh $addr2
falla exec ssh $addr2
con el error:
user@host:~$ ssh: Could not resolve hostname address2: Name or service not known
while executing
"exec ssh $addr2"
¿Qué necesito cambiar para que esto funcione?
Respuesta1
Publicar mi propia respuesta ya que encontré una manera de solucionar este problema. Aquí está el 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
Básicamente, reemplacé la línea spawn ssh $addr2
con send "ssh $addr2\r"
. Estaba intentando generar otro ssh desde donde comencé en lugar de iniciar otro ssh en el host al que entré por primera vez.
Respuesta2
ssh
no puede resolver el nombre de host que le está dando y, por lo tanto, genera un error. Luego le está diciendo que espere enviar la contraseña, pero no hay nada a qué enviarla ya que ssh arrojó el error y salió. Por lo tanto, debe verificar el nombre de host que le está dando, ya que no se resuelve. O puede cambiar a una dirección IP. Pero probablemente sea mejor descubrir por qué no puede determinar quién es "dirección2".
Respuesta3
Generación de claves SSL de búsqueda. Usted genera un par de claves (pública y privada), conserva las claves privadas que genera en su sistema y coloca las claves públicas en los sistemas a los que necesita acceder a través de ssh. Entonces ssh no le solicita la contraseña y no necesita esperar.
Aquí hay un script, "sskkeygen.sh", que uso para generar claves, de modo que puedo generar diferentes pares de claves 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 la clave ~/.ssh/id_dsa.$SYSTEM.pub al sistema remoto. Tenga cuidado: todas las instrucciones dicen que copie el archivo clave, ¡pero desea agregarlo!
Luego necesita un archivo ~/.ssh/config que indique qué claves usar para qué 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