ssh aguarde o prompt e saia

2

O que eu estou tentando alcançar é testar a conexão ssh em 2 servidores atrás do servidor de salto. O requisito é realmente obter o shell carregado (prompt) e, em seguida, sair do servidor (conexão). Primeiro eu tentei:

ssh -A -t [email protected] \
"command1; ssh user1@server1 exit; ssh user2@server2 exit"

Ele se conecta e imediatamente sai da conexão ssh, antes de carregar o prompt (shell). Eu encontrei uma solução alternativa com:

ssh -A -t [email protected] \
"command1; ssh user1@server1 <<EOF
EOF
ssh user2@server2 <<EOF
EOF
"

usando EOF ele realmente espera alguns comandos, portanto, aguarda o prompt e, como não há nenhum, sai.

Existe melhor / melhor maneira de alcançar meu objetivo?

    
por mauek unak 06.09.2017 / 07:35

3 respostas

0

Desde que eu não quero usar o arquivo de configuração para isso, porque isso será usado por mais pessoas em alguns computadores (não quero atualizar tudo isso toda vez que eu fizer alguma alteração), cheguei a esta solução :

ssh -A -t user@server1 \
"command1
echo -e "command2" | ssh user1@server2
echo -e "command3" | ssh user2@server3"

isso me dá exatamente a saída que eu preciso em um bom formato

    
por 07.09.2017 / 22:15
2

Existe uma maneira alternativa para isso, chamada .ssh/config

crie um arquivo chamado .ssh / config com a edição abaixo

Host Server-Jump-*
    User username
    IdentityFile ~/.ssh/id_rsa # -- if you want to provide key
    ForwardAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 12

Host Server1 
    Hostname 21.19.6.19
    Port 2222

Host Server2 
    Hostname Server2-IP
    Port 22
    ProxyCommand ssh -W %h:%p Server1 

Salve este arquivo.

Agora tente este comando abaixo

ssh Server2

A descrição do comando proxy da seção

-W host:port
             Requests that standard input and output on the client be forwarded to host on port over the secure channel.  Implies -N, -T, ExitOnForwardFailure and ClearAllForwardings.  Works
             with Protocol version 2 only.

'%h' Host name to connect 
'%p' Port name to connect 
    
por 06.09.2017 / 07:49
0

Aparentemente, este é um processo totalmente automático de saída de conexão e você não precisa de nada que venha de stdin. Então, por que não fechar stdin?

<&- ssh -A -t [email protected] "
    command1
    ssh user1@server1
    ssh user2@server2
"

Se você receber erros estranhos com command1 porque stdin está fechado, você pode substituir <&- por < /dev/null

    
por 07.09.2017 / 22:44