SSH 에이전트 세션이 무기한 중단됨

SSH 에이전트 세션이 무기한 중단됨

Ruby에서 Net::SSH::Proxy를 통해 설정된 SSH 연결 흐름이 있습니다 client -> proxy server -> server(이는 Ruby 문제가 아니라 SSH 문제인 것 같습니다). 연결이 설정되면 연결이 닫힐 때까지 후속 명령이 터널을 통해 전송됩니다. 이는 약 99%의 경우 잘 작동하지만 때때로 터널이 무기한 열려 있는 상태로 유지되고 활성 연결이 있을 때 서버를 다시 시작하는 것과 관련된 것으로 보입니다. 시나리오를 수동으로 재현하려고 하면(활성 연결이 있는 동안 서버를 다시 시작) 그렇게 할 수 없으며 대신 SSH 연결이 예상대로 닫힙니다.

터널이 이 불확실한 열린 상태에 멈춰 있으면 에서 연결이 client -> proxy server계속 설정되고 proxy server에서 연결도 server계속 설정됩니다. 하지만, 그server 확실히proxy server다시 시작된 이후 의미가 있는 설정된 연결을 표시합니다 .

각 호스트에서 수집된 데이터:

클라이언트(OpenSSH 사용):

ps -o cmd= -p 8029
ssh -o strictHostKeyChecking=no [email protected] -p 2022 -W [10.100.202.65]:22

TZ=UTC0 ps -o lstart= -p 8029
Mon Jul  8 21:17:09 2019

프록시 서버(OpenSSH 사용):

sudo netstat -tnpa | grep 'ESTABLISHED.*sshd' | grep 10.100.202.65
tcp        0      0 10.100.201.246:47414    10.100.202.65:22        ESTABLISHED 29135/sshd: user1

서버(Dropbear 사용)

netstat -tnpa | grep 'ESTABLISHED.*dropbear' | grep 10.100.202.65
<...no results...>

date; uptime
Tue Jul  9 18:56:49 UTC 2019
18:56:49 up 21:37,  load average: 0.50, 0.56, 0.61

^ 연결이 설정된 후 서버가 다시 시작되었음을 확인한 후 server date - uptime= 및 client 명령이 실행되고 있음을 참고하십시오.Mon Jul 8 21:19 UTCMon Jul 8 21:17 UTC

내 첫 번째 생각은 프록시 서버의 sshd가 TCPKeepAlive비활성화되어 서버 연결 끊김을 감지할 수 없다는 것이었지만 sshd_config에서 활성화되었음을 확인했습니다. TCPKeepAlive yes

또한 프록시 서버에서 tcpdump를 수행했지만 대상 서버에서 본 유일한 트래픽은 간헐적으로 발생하는 ARP였습니다.

sudo tcpdump -ni eth1 host 10.100.202.65
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
11:14:45.647479 ARP, Request who-has 10.100.0.2 (ff:ff:ff:ff:ff:ff) tell 10.100.202.65, length 46
11:14:45.660208 ARP, Request who-has 10.100.202.65 (ff:ff:ff:ff:ff:ff) tell 0.0.0.0, length 46
11:15:46.762554 ARP, Request who-has 10.100.0.2 (ff:ff:ff:ff:ff:ff) tell 10.100.202.65, length 46
11:15:46.782608 ARP, Request who-has 10.100.202.65 (ff:ff:ff:ff:ff:ff) tell 0.0.0.0, length 46
11:16:47.956901 ARP, Request who-has 10.100.0.2 (ff:ff:ff:ff:ff:ff) tell 10.100.202.65, length 46
11:16:47.974012 ARP, Request who-has 10.100.202.65 (ff:ff:ff:ff:ff:ff) tell 0.0.0.0, length 46

질문:SSH 연결을 계속 열어두는 것은 무엇입니까? 이를 방지하는 데 사용할 수 있는 다른 SSH 옵션(sshd 구성 또는 명령줄 매개변수)이 있습니까?

편집하다:나는 문제를 발견했다고 믿습니다. 클라이언트에는 ssh_config다음과 같은 ServerAlive* 옵션이 포함되어 있습니다.

    ServerAliveCountMax 3
    ServerAliveInterval 60

그러면 3분 후에 유휴 세션이 종료됩니다. 이 경로에 있는 항목은 proxy server에 연결하는 클라이언트 역할도 합니다 server. proxy server이러한 옵션은 설정 되어 있지 않습니다 . 이제 ssh_config위 항목 에 추가했습니다 proxy server. 성공 여부를 다시 보고하기 위해 또 다른 편집을 하겠습니다.

관련 정보