Limites da multiplexação de SSH

19

Eu tenho a seguinte entrada no meu arquivo .ssh/config

Host AAA
    User BBB
    HostName CCC
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p

O acima me permite multiplexar várias sessões ssh através da mesma conexão ssh sem ter que digitar a senha toda vez que eu precisar de uma nova sessão (contanto que a conexão principal permaneça aberta).

No entanto, notei que uma vez que tenho um número relativamente alto de conexões multiplexadas (~ 7), não posso adicionar mais sessões à mesma conexão multiplexada, e começo a obter o seguinte erro:

> ssh -X AAA

mux_client_request_session: session request failed: Session open refused by peer
Password: 

Minhas perguntas:

Por que estou recebendo esse erro? Existe um limite no número de sessões ssh que eu posso multiplexar na mesma conexão? Posso mudar esse limite? Isso seria uma má ideia?

    
por Amelio Vazquez-Reina 20.10.2011 / 01:46

2 respostas

21

O daemon sshd no servidor está limitando o número de sessões por conexão de rede. Isso é controlado pela opção MaxSessions em /etc/ssh/sshd_config . Além disso, a opção MaxStartups pode precisar ser aumentada se você usar um grande número de sessões. (Veja man sshd_config para mais detalhes.) A opção para modificar MaxSessions limite foi introduzida no OpenSSH 5.1 e parece que o número foi fixado anteriormente em 10. Se você exceder MaxSessions no servidor, verá sshd[####]: error: no more sessions no log do servidor.

    
por 20.10.2011 / 14:45
3

Eu encontrei este problema em um servidor com uma versão anterior do OpenSSH. Eu controlo o servidor e resolvi o problema criando dois CNAMEs na minha configuração nomeada:

realhost.myexample.com.      IN  A       XXX.XXX.XXX.XXX
realhost2.myexample.com.     IN  CNAME   realhost.myexample.com.
realhost3.myexample.com.     IN  CNAME   realhost.myexample.com.

Em seguida, na configuração do meu cliente ssh local:

ControlMaster auto
ControlPath ~/.ssh/%r_%p_%h

host realhost
hostname realhost.myexample.com

host realhost2
hostname realhost2.myexample.com

host realhost3
hostname realhost3.myexample.com

A instrução ControlPath é para que os nomes dos soquetes de controle não interfiram uns nos outros.

É isso, mas para facilitar o gerenciamento, eu escrevi um script de wrapper para 'ssh' no lado do cliente. Ele entende que existem 'grupos' de hosts (neste caso, realhost, realhost1, realhost2 compreendem um grupo). Ao emitir 'sshwrapper realhost', se não houver canais abertos, todos os três serão abertos e uma sessão será iniciada. Na próxima vez que for executado, ele contará com conexões abertas por canal e abrirá a nova sessão no canal com o menor número de conexões.

Com um real e dois hosts 'falsos', posso conectar 30 vezes antes de receber um erro. O login é extremamente rápido, exceto que o tempo inicial leva um segundo ou dois, já que todos os três canais de controle estão abertos naquele momento.

    
por 21.02.2016 / 01:19

Tags