ssh config a partir do Ubuntu 12.04 não funciona em 14.04.4

2

Eu configurei um novo servidor Ubuntu 14.04.4 para substituir uma máquina 12.04, mas o novo servidor está tendo problemas com a configuração ssh antiga. Eu posso ssh sem a configuração, e pode até mesmo ssh através de um servidor de bastiões sem nenhum problema a partir da linha de comando. Por exemplo,

ssh -o ProxyCommand="ssh -W %h:%p bastion.my.company.com" lab123.my.company.com

Mas, se eu criar um arquivo /home/myname/.ssh/config com as configurações a seguir, estou com problemas.

ServerAliveInterval 150
ServerAliveCountMax 6

ControlMaster auto
ControlPath /tmp/ssh_%h_%p_%r

Host *.my.company.com
User   myname
IdentityFile /home/myname/.ssh/mykey.pem
ProxyCommand ssh bastion -W %h:%p
ForwardAgent yes

Host bastion
Hostname        bastion.my.company.com
User            myname
IdentityFile    /home/myname/.ssh/mykey.pem

Quando tento usar o ssh com a configuração acima, recebo centenas de processos ssh como os seguintes:

myname 29855 29854  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29856 29855  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29857 29856  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29858 29857  0 12:24 pts/6    00:00:00 ssh bastion -W bastion.my.company.com:22

ssh apenas trava até eu pressionar Ctrl + C , e então todos os processos ssh morrem.

Um traço das últimas linhas de todos os processos se parece com:

....
write(4, "SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2"..., 43) = 43
read(5, 0xbfe08efc, 1)                  = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
+++ killed by SIGINT +++

Uma olhada mais adiante no rastreio mostra que as alças de arquivo são as seguintes:

...
socket(PF_LOCAL, SOCK_STREAM, 0)        = 3
connect(3, {sa_family=AF_LOCAL, sun_path="/tmp/ssh_bastion.my.company.com_22_myname"}, 57) = -1 ENOENT (No such file or directory)
close(3)                                = 0
pipe([3, 4])                            = 0
pipe([5, 6])                            = 0
..

Parece estranho que não haja nenhum arquivo de soquete em / tmp e não haja ligação no rastreio.

    
por Joe 15.10.2016 / 19:03

2 respostas

1

A solução foi fornecida em um comentário por steeldriver, que sugeriu que eu excluísse bastion.my.company.com da correspondência de host curinga.

Por exemplo,

ServerAliveInterval 150
ServerAliveCountMax 6

ControlMaster auto
ControlPath /tmp/ssh_%h_%p_%r

Host *.my.company.com !bastion.my.company.com
User   myname
IdentityFile /home/myname/.ssh/mykey.pem
ProxyCommand ssh bastion -W %h:%p
ForwardAgent yes

Host bastion
Hostname        bastion.my.company.com
User            myname
IdentityFile    /home/myname/.ssh/mykey.pem
    
por 18.10.2016 / 16:52
0

ControlPath /tmp/ssh_%h_%p_%r

Essa é uma péssima ideia para colocar seus sockets de controle no "public-acessível" /tmp . Deve estar em algum diretório seguro, onde nenhum outro usuário possa acessar.

O comportamento parece ter mudado o padrão de CanonicalizeHostname . O que esta opção padroniza em seu sistema? Tente desativá-lo: CanonicalizeHostname no .

A definição LogLevel DEBUG3 também é um bom começo para problemas de depuração com ssh . Você pode definir essa opção na sua configuração e postar os logs?

    
por 16.10.2016 / 21:07