![클라이언트에서 ClientAliveInterval을 설정할 수 있습니까?](https://linux55.com/image/173802/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%97%90%EC%84%9C%20ClientAliveInterval%EC%9D%84%20%EC%84%A4%EC%A0%95%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
클라이언트(ssh) 측에서 특정 연결에 대해 sshd와 같은 것을 설정할 수 있습니까 ClientAliveInterval
?ClientAliveCountMax
나는 이와 같은 것을 생각하고 있습니다 ssh -o ClientAliveInterval=15
(클라이언트/ssh 옵션에 -o 때문에 분명히 작동하지 않습니다. 또는 특정 연결에 sshd 옵션을 적용하는 방법일 수도 있습니다.
ClientAliveInterval
내 사용 사례는 원격 포트 전달 연결의 경우 서버가 연결을 더 빨리 닫을 수 있도록 낮은 값을 설정하고 싶다는 것입니다 . 목표는 포트를 예약하고 다시 연결하지 못하게 하는 오래된 sshd 세션을 방지하는 것입니다("오류: 수신 포트에 대한 원격 포트 전달에 실패했습니다").
참고로 나는아니요또는 연결된 클라이언트 ServerAliveInterval
만 ServerAliveCountMax
제어하므로 원격 포트 전달에는 도움이 되지 않습니다.
답변1
별도의 연결을 사용할 수 있는 경우오직가능한 포트를 전달한 -N
후 다음 해결 방법을 고려하십시오.
while echo; do sleep 1; done | ssh user@server 'exec bash -c "while read -t 5; do :; done"'
(자신의 포트 포워딩 포함)
개행이 echo
원격 끝에 도달하는 것을 멈추면 read -t 5
결국 실패하고 전체 원격 루프가 종료됩니다. SSH 서버는 하위 프로세스가 종료되었음을 확인하고 연결을 종료하고 포트를 해제합니다.
노트:
read -t
이식성이 없으므로 이를 처리하기 위해 명령이 명시적으로 호출됩니다bash
.- 명령 해석기
user@server
가bash
필요 하지 않으면 (아님 )exec bash
만 작동합니다."while read -t 5; do :; done"
'exec bash -c …'
read -t 5
매우 간단합니다. 다음 개념을 구현하는 코드를 개발할 수 있습니다.Interval
그리고CountMax
.
나는 서버로부터 메시지를 받는 -R
대신 실제 원격 포트 전달( )을 사용하여 내 노트북에서 이 접근 방식을 테스트했습니다 . Wi-Fi 연결을 끊자 경고음이 멈췄습니다. 재빨리 Wi-Fi에 다시 연결하자 경고음이 계속해서 들렸습니다. 그런데 몇 초 늦게 다시 연결했더니 SSH 서버가 의도적으로 연결을 종료했다는 사실을 알게 되었기 때문에 로컬 명령이 종료되었습니다. 중요한 것들:beep
:
*AliveInterval
및 에서 관리하는 동일한 서버에 대한 다른 SSH 연결이 있으며*AliveCountMax
계속 유지됩니다. 이는 이러한 옵션의 도움 없이 내 특정 연결이 종료되었음을 의미합니다. Wi-Fi를 끄고 오랫동안 기다리면 특수 연결의 로컬 절반을 포함하여 거의 모든 연결이 이러한 옵션으로 종료됩니다. 예외는 원격 절반입니다. 어쨌든bash
이미 종료되었기 때문에 오래 전에 사라졌습니다.- 다시 접속할 수 있었어요곧, 전혀 이해하지 못했습니다
remote port forwarding failed for listen port
. 그래서 내 방법이 귀하의 문제를 효과적으로 해결할 수 있다고 생각합니다.
답변2
아니요, 이러한 설정은 클라이언트에서 제어할 수 없습니다. 서버가 연결 유지 메시지를 보내는 빈도와 연결을 끊기 전에 기다리는 횟수를 제어합니다. 이는 서버 전체 설정이며 모든 연결에 적용됩니다. 클라이언트가 연결별로 설정하도록 허용하면 악의적인 클라이언트가 과도한 서버 리소스를 소비할 수 있으므로 보안에 영향을 미칩니다.
이러한 설정을 지정하려면 /etc/sshd/sshd_config
서버의 파일에서 해당 설정을 수행해야 합니다. 끊어진 연결을 빠르게 종료하도록 설정하는 것은 문제가 되지 않습니다. 일반적으로 이러한 연결은 결국 끊어지기 때문입니다.