내 목표는 단일 서버 에서 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
나는 이것에 꽤 오랫동안 붙어 있습니다.
어떤 도움이라도 깊이 감사하겠습니다!
sleep 100s
. ssh 세션이 아니라 자신의 컴퓨터에서 실행됩니다.
error: reexec socketpair: Too many open files
으므로 이전 값 nofile
(예 : 65535)이 충분하지 않다고 가정합니다 . ControlMaster에 익숙하지 않지만 시도해 보겠습니다. 감사합니다 !! :)
ps axu | egrep "ssh|sleep" | grep -v grep
나열 sleep 100s
합니다 ssh
. 명령을로 변경해야한다고 생각합니다 ssh "echo hi; sleep 100s"
.
sleep 100
통해 전송 된 명령에 있어야합니다. 실제 스크립트의 경우에 해당하지만 오타가 있습니다. 그에 따라 기본 게시물을 업데이트했습니다. 지적 해 주셔서 감사합니다 !!