Advance autologin via 2 jumphost / passphrase

4

Eu preciso encontrar uma maneira de se autologar no Remote Machine. Existem várias maneiras em que podemos fazer isso, mas isso é um pouco complicado para mim.

Auto Efetue login em uma máquina remota e execute o comando ou script e redirecione a saída no arquivo do sistema local.

ssh remote-host < ./script >> storageinfo_$date.txt

Mas a parte difícil é que não podemos nos conectar diretamente ao host remoto; Precisamos primeiro nos conectar ao Jumphost1 - > Jumphost2 - > e então - > remote-host

O Jumphostx é habilitado para sshkeygen, mas com senha para, por exemplo: userpass
O host remoto não está habilitado para sshkeygen, por exemplo: remotepass

Costumávamos fazer isso com o arquivo .ssh/config da maneira abaixo. Isso foi bem sucedido até agora no env de teste. Mas não devemos instalar o expect no live env.

# cat .ssh/config

Host jump1-*
    User ldap-user
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 12

Host jump1-centos01-temporary 
    Hostname 13.1.2.19
    Port 2222

Host jump1-centos01        
    Hostname 1.2.1.18
    Port 22
    ProxyCommand ssh -W %h:%p jump1-centos01-temporary

Host remote-host
    Hostname 12.1.1.8
    ProxyCommand ssh -W %h:%p jump1-centos01
    User root

conexão ssh com esperar e enviar patern

# cat expect.sh 

#!/usr/bin/env expect
set timeout 7
set date [exec date "+%d-%B-%Y"]

spawn sh -c "ssh va1ap-vsns0001n < ./isi.py > storageinfo_$date.txt"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Enter passphrase for key '/root/.ssh/id_rsa':"
send "userpass\r"
expect "Password:"
send "remotepass\r"
interact
    
por Poo 11.05.2017 / 09:12

1 resposta

0

ssh -t $jump1 ssh -t $jump2 ssh -t $tgt

alcançaria a conexão que você está procurando; -t garante que um pty seja alocado, o que normalmente não seria se ssh fosse solicitado a executar um comando no destino.

Nessa circunstância, um agente e o encaminhamento de agente pareceriam totalmente apropriados, então ficaria mais parecido com isto:

ssh -A -t $jump1 ssh -A -t $jump2 ssh -t $tgt

Se isso não funcionar para você, script pode ser usado como uma alternativa para expect em algumas circunstâncias. Por exemplo, echo $passwd | script -q -f -c "ssh -q -t $host sudo -p \"''\" \"$some_command\" é um padrão que precisei usar para fins não interativos.

Na verdade, eu gostaria de obter algum tipo de autenticação baseada em chave ou em conexão única configurada; o fluxo de trabalho que você descreve parece um pesadelo, especialmente se os seus ambientes de teste e produção precisarem ser tão diferentes.

    
por 22.05.2017 / 19:56