Script para iniciar sesión en ssh dos veces

Script para iniciar sesión en ssh dos veces

Necesito iniciar sesión sshdos 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 $addr2falla exec ssh $addr2con 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 $addr2con 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

sshno 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

información relacionada