SSH 멀티플렉싱의 한계

SSH 멀티플렉싱의 한계

.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 세션 수에 제한이 있나요? 이 한도를 변경할 수 있나요? 이것이 나쁜 생각인가요?

답변1

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

답변2

이전 버전의 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초 정도의 초기 시간을 제외하고는 로그인이 매우 빠릅니다.

관련 정보