클라이언트에서 ClientAliveInterval을 설정할 수 있습니까?

클라이언트에서 ClientAliveInterval을 설정할 수 있습니까?

클라이언트(ssh) 측에서 특정 연결에 대해 sshd와 같은 것을 설정할 수 있습니까 ClientAliveInterval?ClientAliveCountMax

나는 이와 같은 것을 생각하고 있습니다 ssh -o ClientAliveInterval=15(클라이언트/ssh 옵션에 -o 때문에 분명히 작동하지 않습니다. 또는 특정 연결에 sshd 옵션을 적용하는 방법일 수도 있습니다.

ClientAliveInterval내 사용 사례는 원격 포트 전달 연결의 경우 서버가 연결을 더 빨리 닫을 수 있도록 낮은 값을 설정하고 싶다는 것입니다 . 목표는 포트를 예약하고 다시 연결하지 못하게 하는 오래된 sshd 세션을 방지하는 것입니다("오류: 수신 포트에 대한 원격 포트 전달에 실패했습니다").

참고로 나는아니요또는 연결된 클라이언트 ServerAliveIntervalServerAliveCountMax제어하므로 원격 포트 전달에는 도움이 되지 않습니다.

답변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@serverbash필요 하지 않으면 (아님 ) 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서버의 파일에서 해당 설정을 수행해야 합니다. 끊어진 연결을 빠르게 종료하도록 설정하는 것은 문제가 되지 않습니다. 일반적으로 이러한 연결은 결국 끊어지기 때문입니다.

관련 정보