내 목표는 단일 서버 에서 10000 개의 동시 ssh를 실행하는 것 입니다.
간단하게하기 위해 localhost에 ssh-ing하고 있습니다.
for i in `seq 1 10000`; do
ssh localhost "echo ${i}; sleep 100" >>./info 2>>./log &
done
sleep 100
1만번째 ssh를 시작은, 1 SSH 연결에 여전히 그래서 참으로 10000가 있는지 확인하는 것입니다 동시 SSH 의.
그리고 내가 가진 두 가지 종류의 오류 메시지는 다음과 같습니다.
1. ssh_exchange_identification: Connection closed by remote host
2. ssh_exchange_identification: read: Connection reset by peer
다음과 같이 수정했습니다.
- 에서
/etc/security/limits.conf
와/etc/security/limits.d/90-nproc.conf
, 세트의 소프트 및 하드nofile
및nproc
(?. – : 아니오 최대 값이 갱신이 최대 가능한 가치를 잘하지 않습니다에 65535 1048576를 ) - 에서
/etc/sysctl.conf
, 세트kernel.pty.max = 65535
- 에서을
/etc/ssh/sshd_config
설정하십시오MaxStartups 10000
.
이러한 수정을 통해 단일 서버에서 1000 개의 동시 ssh 를 성공적으로 실행할 수 있지만 2000 이상 ssh 에서는 작동하지 않습니다 .
어떤 사람들은 값 변경 제안 MaxSessions
(? 사실 나는 그것의 사용에 대한 취소 아니에요 : 내 경우에 영향을 다중화 않는 방법)을 /proc/sys/net/core/netdev_max_backlog
하고 /proc/sys/net/core/somaxconn
,하지만 그들은 아무 차이가없는 것 같다.
그들이 10000 개 동시 경우 또한, 오류가 없습니다 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
나는 이것에 꽤 오랫동안 붙어 있습니다.
어떤 도움이라도 깊이 감사하겠습니다!
답변
/ me 그가 댓글을 달 수 있으면 좋겠다
sshd는 (일반적으로 정확한 유스 케이스 등을 지정하지 않았지만) 로그인 당 pty를 할당해야하지만 귀하의 경우에는 ssh “echo hi; sleep 100s”가 pty를 할당하지 않습니다. kernel.pty.max 설정이 필요하지 않습니다. 수천 명의 사용자가 로그인 하여 * 테스트 하지 않는 한 … -t 옵션을 테스트에 추가해야합니다. ssh -t “echo hi; 수면 100 초”
error: reexec socketpair: Too many open files
Jessie 시스템으로 업그레이드 된 Wheezy 의 테스트에서 당면한 문제로 돌아가서 / etc / security / limit *가 sshd의 한계를 변경하지 않는다는 것을 알았습니다.
cat /proc/<pid-of-sshd>/limits
필자의 경우 /etc/security/limits.conf에서 설정 한 후 다음을 확인하십시오 . * nofile soft 65535 * nofile hard 65535는 여전히 sshd의 한계에 대해 1024 (soft) 및 4096 (hard) 만보고합니다. 해결 방법은 ulimit 명령을 사용 하여 스크립트 내 에서 ulimit -Hn 65535
& 를 강제하는 것으로 보입니다 .sshd의 nofiles를 1024/4096에서 65535/65535로 올렸습니다.ulimit -n 65535
/etc/init.d/ssh