SSH 클라이언트가 "열린 파일이 너무 많습니다"라는 오류로 인해 연결을 거부합니다.

SSH 클라이언트가 "열린 파일이 너무 많습니다"라는 오류로 인해 연결을 거부합니다.

컴퓨터에서 역방향 SSH 클라이언트를 실행합니다. 잠시 후 연결 거부 요청이 수신되고 SSH 클라이언트에 로그인하면 표시됩니다.

Oct 12 00:21:19 ipaserver0 reverse-tunnel.sh: debug3: 채널 1018: 연결 대기 중

10월 12일 00:21:19 ipaserver0 reverse-tunnel.sh: debug1: 채널 1018: 연결 실패: 연결이 거부되었습니다.

10월 12일 00:21:19 ipaserver0 reverse-tunnel.sh: 소켓: 열린 파일이 너무 많습니다.

여기서 문제가 무엇인지 잘 모르겠습니다. SSH 터널이 지원할 수 있는 채널 수에 제한이 있습니까?

답변1

프로세스가 열 수 있는 파일 설명자 수에는 제한이 있습니다. SSH 터널에는 클라이언트 측과 서버 측 연결을 위한 파일 설명자가 필요합니다. 따라서 채널 수가 제한되어 있습니다.

Linux에서는 lsof. 모든 프로세스의 파일이 나열됩니다. -c ssh명령 이름이나 특정 프로세스를 사용하여 -p pid나열된 프로세스를 제한 할 수 있습니다 .

답변2

나도 같은 상황에 직면했다.
서버측과 클라이언트측 모두 파일 열기 제한을 설정해야 한다는 점에 유의하세요.
포트 포워딩이 있는 경우 포워딩 프로세스도 설정해야 합니다.

SSH 전달 프로세스

예를 들어, Host0이 실행되는 경우

ssh -fNL :1234:host2:1234  host1

그런 다음 프로세스를 얻습니다.

  • ssh @host0
    //sudo netstat -ltnp | sudo netstat -ltnp | ssh @host0 //sudo netstat -ltnp |
  • sshd @host1
    //sudo netstat -atnp | sshd @host1 //sudo netstat -atnp | sshd @host1 grep :1234(연결 후
    //pgrep -af "sshd: $USER\s*$" 실행)

토폴로지:

client ----> ssh ===tunnel=== sshd ----> server

ssh(-L,-R)는 애플리케이션 계층에서 앞으로 실행되며
각 연결에는 TCP 소켓 fd가 필요합니다.

// 연결 수가 많으면 성능이 낮습니다.

프로세스 실행을 위해

NOFILE 제한사항을 확인하십시오.

$ prlimit -p 1930 -n
RESOURCE DESCRIPTION                 SOFT    HARD UNITS
NOFILE   max number of open files 1048576 1048576 files

NOFILE 제한 변경

prlimit -p 1930 -n1048576

현재 대화형 bash의 경우

확인하다

$ ulimit -n
1024

변화

ulimit -n 1048576

관련 정보