Transformar um SSH com falha em um erro fatal

3

Eu tenho um script que se conecta a um host remoto para replicar alguns arquivos via SSH. Eu preciso conectar a um daemon rsync ouvindo na porta 873. Para conseguir isso eu tenho uma configuração ssh como essa.

Host blah
    LocalForward 10873 127.0.0.1:873
    Hostname 10.2.4.1
Infelizmente por causa do tempo desse script, há uma pequena chance de que, ocasionalmente, quando ele tenta estabelecer a sessão SSH, outro script semelhante terá a porta aberta para um host diferente.

Se eu me conectar enquanto outra sessão ssh estiver aberta, recebo a mensagem óbvia Endereço já em uso .

me@local:~$ ssh blah
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 10873
Could not request local forwarding.
Linux remote 2.6.26-2-amd64 #1 SMP Tue Jan 25 05:59:43 UTC 2011 x86_64
motd...
remote:~$ 

O que eu quero que aconteça é que o cliente SSH saia imediatamente com um código de saída para que eu possa colocar alguma lógica no meu script para relatar uma falha em vez de tentar executar comandos contra a porta encaminhada para o host incorreto.

    
por Zoredache 08.08.2011 / 19:35

1 resposta

8

Há uma opção de configuração ssh para ele (de ssh_config(5) ):

ExitOnForwardFailure
Specifies whether ssh(1) should terminate the connection if it cannot set up all requested dynamic, tunnel, local, and remote port forwardings. The argument must be ''yes'' or ''no''. The default is ''no''.

Então, na sua configuração do ssh, você pode adicionar:

ExitOnForwardFailure yes

Ou na linha de comando:

$ ssh -o ExitOnForwardFailure=yes blah
    
por 08.08.2011 / 20:32

Tags