단일 서버에 대해 대규모 동시 SSH 활성화

단일 서버에 대해 대규모 동시 SSH 활성화

내 목표는 10000 동시성을 허용하는 것입니다SSH운영 중하나의섬기는 사람.

작업을 단순하게 유지하기 위해 SSH를 통해 localhost에 연결합니다.

for i in `seq 1 10000`; do
    ssh localhost "echo ${i}; sleep 100"  >>./info 2>>./log &
done

sleep 10010,000번째 SSH가 시작될 때 첫 번째 SSH가 여전히 연결되어 있는지 확인하는 것입니다. 따라서 실제로 10,000개의 SSH가 있습니다.동시에 SSH에스.

다음은 내가 받은 두 가지 오류 메시지입니다.

1. ssh_exchange_identification: Connection closed by remote host

2. ssh_exchange_identification: read: Connection reset by peer

다음과 같이 수정했습니다.

  1. /etc/security/limits.conf및 에서 /etc/security/limits.d/90-nproc.confSoft&hard nofile&를 nproc65535로 설정합니다(가능한 최대값이 맞죠? -- 업데이트: 아니요. 최대값은 다음과 같습니다).1048576)
  2. 중간 /etc/sysctl.conf, 아마도kernel.pty.max = 65535
  3. /etc/ssh/sshd_config, 설정 MaxStartups 10000.

이러한 수정을 통해 1000개의 동시 실행을 성공적으로 실행할 수 있었습니다.SSH단일 서버에 있지만 2000 이상에서는 작동하지 않습니다.SSH에스.

MaxSessions/proc/sys/net/core/netdev_max_backlog어떤 사람들 은 및 값을 변경하자고 제안했지만(실제로 사용법이 명확하지 않습니다. 멀티플렉싱이 내 경우에 어떤 영향을 미칩니까?), /proc/sys/net/core/somaxconn아무런 차이가 없는 것 같습니다.

또한 10,000 동시성에서는 오류가 보고되지 않습니다.SSH도착하다다른서버(서버에 SSH로 접속할 때만 문제가 발생함)하나의섬기는 사람):

for i in `seq 1 10000`; do
    j=$(( 1 + $i % 8 ))
    ssh server-${j} "echo hi; sleep 100" >info-${j} 2>log-${j} &
done

나는 오랫동안 이 문제에 갇혀 있었습니다.
어떤 도움이라도 대단히 감사하겠습니다!

답변1

/그가 댓글을 달았으면 좋겠다

sshd는 각 로그인에 대해 pty를 할당하기 위해 (일반적으로 정확한 사용 사례 등을 지정하지 않았지만) 필요하지만 귀하의 경우 ssh "echo hi; sleep 100s"는 pty를 할당하지 않으므로 커널이 없습니다. pty는 .max 설정이 필요합니다...수천 명의 사용자를 원하지 않는 한녹음됨in*... 이를 테스트하려면 테스트에 -t 옵션을 추가해야 합니다. ssh -t "echo hi; 100초 동안 잠자기"

Jessie 시스템으로의 Wheezy dist 업그레이드 테스트로 돌아가서 error: reexec socketpair: Too many open files /etc/security/limit*가 sshd의 제한을 변경하지 않는다는 것을 발견했습니다.

내 경우에는 /etc/security/limits.conf에서 설정한 후 확인하십시오 cat /proc/<pid-of-sshd>/limits . * nofile Soft 65535 * nofile hard 65535는 여전히 sshd 제한의 1024(소프트) 및 4096(하드)만 보고합니다. 해결책은 ulimit 명령을 사용하여 스크립트 내에서 &를 강제로 사용하는 것 같습니다 ulimit -Hn 65535. sshd의 nofiles를 1024/4096에서 65535/65535로 늘렸습니다.ulimit -n 65535/etc/init.d/ssh

답변2

/etc/security/limits.conf 등이 작동하지 않는 이유는 PAM(시스템 서비스 아님)을 통해 로그인한 사용자에게만 적용되기 때문입니다.

서비스 제한을 설정하려면 (예: Ubuntu 20) /etc/systemd/system.conf를 편집하고 다음과 같은 줄을 추가할 수 있습니다.

DefaultLimitNOFILE=<Soft Limit>:<Hard Limit>

sshd 데몬을 다시 시작하는 것만으로는 충분하지 않은 것 같습니다. 새 설정은 시스템을 재부팅한 후에만 적용됩니다(또는 "sudo systemctl daemon-reload" 실행).

자세한 내용은 여기를 참조하세요: https://medium.com/@shihtiy.tw/linux-max-open-file-limit-with-system-service-ca8ff2562d1c

관련 정보