TL; DR: Por que o cliente ssh do OpenSSH 6.x envia a string "OpenSSH_6.2p2" imediatamente ao se conectar, e o cliente OpenSSH 5.x não envia nada?
Estou tentando fazer com que um túnel ssh funcione via proxy HTTP / S. Eu posso obter uma conexão TCP que é adequadamente tunelada, usando uma solicitação http CONNECT. Ele funciona corretamente com o cliente SSH no meu Mac OSX 10.9, mas não funciona com um Mac mais antigo que executa um OSX antigo.
Isso levou à seguinte estranheza que eu estou perdido para explicar. (Isso pode ser uma pergunta tola para alguém familiarizado com o protocolo SSH, mas depois de procurar um pouco não consigo encontrar uma explicação simples de como esse protocolo deve ser, e espero não ter que ler o RFC inteiro para para depurar isso, assim este post.)
No Mac OSX 10.9 com OpenSSH_6.2p2:
Terminal 1:
nc -l 127.0.0.1 5000
Terminal 2:
ssh [email protected] -p 5000
O terminal 1, em seguida, gera:
OpenSSH_6.2p2
Então, esse cliente mais novo transmitiu essa string na conexão.
No CentOS 6.3 com OpenSSH_5.3p1:
Os comandos do Terminal 1 e 2 são exatamente iguais aos anteriores.
Mas o terminal 1 não produz nada. Parece que este cliente mais antigo não enviou nada após a ligação.
A própria conexão TCP está funcionando corretamente de tudo o que posso dizer. Parece ser uma diferença de protocolo. Mas ambos estão aparentemente usando o protocolo "versão 2" do SSH.
Estas duas máquinas parecem poder se conectar umas às outras sem problemas. No entanto, há algo estranho acontecendo com o meu túnel, e estou tentando entender o que o protocolo está procurando para que eu possa depurar.
Alguém entende o que está acontecendo aqui? Ou talvez saiba onde há uma explicação simples do tipo 1,2,3 de qual lado envia o que para este protocolo e qualquer informação sobre diferenças de versão?