단일 서버에 대규모 동시 SSH 사용


9

내 목표는 단일 서버 에서 10000 개의 동시 ssh를 실행하는 것 입니다.

간단하게하기 위해 localhost에 ssh-ing하고 있습니다.

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

sleep 1001만번째 ssh를 시작은, 1 SSH 연결에 여전히 그래서 참으로 10000가 있는지 확인하는 것입니다 동시 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.conf, 세트의 소프트 및 하드 nofilenproc(?. - : 아니오 최대 값이 갱신이 최대 가능한 가치를 잘하지 않습니다에 65535 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,하지만 그들은 아무 차이가없는 것 같다.

그들이 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

나는 이것에 꽤 오랫동안 붙어 있습니다.
어떤 도움이라도 깊이 감사하겠습니다!


1
sshd 서버 로그는 연결 거부 이유에 대한 자세한 정보를 제공 할 수 있습니다. 기본적으로 10000 세션 만 원한다면 ControlMaster를 사용하여 멀티플렉싱을 사용하고 MaxSessions를 범프하는 것이 좋습니다.
Jakuje

1
나는 당신이 생각하는 것을하지 않는다고 생각합니다 sleep 100s. ssh 세션이 아니라 자신의 컴퓨터에서 실행됩니다.
다니엘 쿨만

1
@Jakuje 서버 로그를 확인하도록 상기시켜 주셔서 감사합니다! 나는을 찾았 error: reexec socketpair: Too many open files으므로 이전 값 nofile(예 : 65535)이 충분하지 않다고 가정합니다 . ControlMaster에 익숙하지 않지만 시도해 보겠습니다. 감사합니다 !! :)
Clara

1
흥미롭게도, 내가 라인 중 하나를 실행할 때에는 아닌을 ps axu | egrep "ssh|sleep" | grep -v grep나열 sleep 100s합니다 ssh. 명령을로 변경해야한다고 생각합니다 ssh "echo hi; sleep 100s".
다니엘 쿨만

2
@danielkullmann 예 당신은 절대적으로 옳습니다-ssh를 sleep 100통해 전송 된 명령에 있어야합니다. 실제 스크립트의 경우에 해당하지만 오타가 있습니다. 그에 따라 기본 게시물을 업데이트했습니다. 지적 해 주셔서 감사합니다 !!
클라라

답변:


2

/ 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

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