SSH 멀티플렉싱의 한계


26

.ssh/config파일에 다음 항목이 있습니다

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

위의 내용은 새 세션이 필요할 때마다 (마스터 연결이 열려있는 한) 암호를 입력하지 않고도 동일한 ssh 연결을 통해 여러 ssh 세션을 다중화 할 수 있습니다.

그러나 일단 비교적 많은 수의 연결이 다중화되면 (~ 7) 동일한 다중화 연결에 더 많은 세션을 추가 할 수 없으며 다음 오류가 발생합니다.

> ssh -X AAA

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

내 질문 :

이 오류가 발생하는 이유는 무엇입니까? 동일한 연결에서 멀티플렉싱 할 수있는 ssh 세션 수에 제한이 있습니까? 그 한계를 바꿀 수 있습니까? 그게 나쁜 생각입니까?


2
질문에 직접 대답 할 수는 없지만 문제를 추적하는 방법에 대한 제안을 제공 할 수 있습니다. 피어가 연결을 거부했기 때문에 연결하려는 시스템의 로그를 살펴 보는 것으로 시작하겠습니다. sshd에 오류가 있는지 확인하십시오. 그렇지 않은 경우 LogLevel을 늘리고 다시 시도하십시오. 즉시 명백하지 않은 로그 메시지를 발견하고 구문을 검색해도 도움이되지 않으면 소스 코드에서 grep을 사용할 수 있습니다. 오류 메시지는 종종 조건 세트로 둘러싸여 있습니다. 하나 또는 일부가 충족되지 않아서이 메시지가 나타납니다.
Shawn J. Goff

답변:


26

sshd서버 의 데몬이 네트워크 연결 당 세션 수를 제한하고 있습니다. 이것은의 MaxSessions옵션으로 제어됩니다 /etc/ssh/sshd_config. 또한 MaxStartups당신이 세션의 큰 숫자를 사용하는 경우 옵션을 늘려야 할 수도 있습니다. (자세한 내용 man sshd_config은 참조 ) OpenSSH 5.1에MaxSessions 한계 수정 옵션 이 도입되었으며이 숫자는 이전에 10으로 고정되어있는 것으로 보입니다. MaxSessions서버 를 초과 sshd[####]: error: no more sessions하면 서버 로그에 표시됩니다.


4

이전 버전의 OpenSSH가있는 서버에서이 문제가 발생했습니다. 서버를 제어하고 명명 된 구성에 두 개의 CNAME을 만들어 문제를 해결했습니다.

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.

그런 다음 로컬 ssh 클라이언트 구성에서

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

ControlPath 문은 제어 소켓 이름이 서로 밟지 않도록합니다.

그게 끝났지 만 관리하기 쉽도록 클라이언트쪽에 'ssh'에 대한 래퍼 스크립트를 작성했습니다. 호스트의 '그룹'이 있음을 이해합니다 (이 경우 realhost, realhost1, realhost2는 하나의 그룹으로 구성됨). 'sshwrapper realhost'를 발행 할 때 열린 채널이 없으면 세 개가 모두 열리고 하나의 세션이 시작됩니다. 다음에 실행될 때 채널당 열린 연결 수를 세고 연결이 가장 적은 채널에서 새 세션을 엽니 다.

하나의 실제 호스트와 두 개의 '가짜'호스트를 사용하면 오류를 받기 전에 30 번 연결할 수 있습니다. 세 개의 제어 채널이 모두 열릴 때 초기 시간이 1-2 초 걸리는 것을 제외하고는 로그인이 매우 빠릅니다.


스크립트는 실제 시간 절약처럼 들리며 실제로 유용합니다. 그래도 가지고 있다면 대중과 공유 하시겠습니까?
thefourtheye

질문에 대한 답변이 아니기 때문에 여기에 적합한 지 잘 모르겠습니다. 또한 방금 직접 작성했으며 Mac 클라이언트에서 실행됩니다 (Linux 서버에 로그인하기 위해). 이 코드는 'ps'출력을 구문 분석하고 다른 'ps'구문으로 인해 Linux에서 실행되도록 변경해야합니다.

충분합니다. 그래도 일반적인 아이디어를 공유해 주셔서 감사합니다.
thefourtheye

스크립트를 moosiefinance.com:8081/sshm.zip에 배치했습니다.

굉장합니다 ... 고마워요 ... 통과 해 봅시다
thefourtheye
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.