실패한 SSH 전달을 치명적인 오류로 만들기

실패한 SSH 전달을 치명적인 오류로 만들기

SSH를 통해 일부 파일을 복사하기 위해 원격 호스트에 연결하는 스크립트가 있습니다. 포트 873에서 수신 대기하는 rsync 데몬에 연결해야 합니다. 이를 달성하기 위해 다음과 같은 SSH 구성이 있습니다.

Host blah
    LocalForward 10873 127.0.0.1:873
    Hostname 10.2.4.1

불행하게도 이 스크립트의 타이밍으로 인해 때때로 SSH 세션 설정을 시도할 때 또 다른 유사한 스크립트가 다른 호스트에 대한 포트를 열 수 있습니다.

다른 SSH 세션이 열려 있는 동안 연결하면 분명한 메시지가 나타납니다.주소가 이미 사용 중입니다..

me@local:~$ ssh blah
bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 10873
Could not request local forwarding.
Linux remote 2.6.26-2-amd64 #1 SMP Tue Jan 25 05:59:43 UTC 2011 x86_64
motd...
remote:~$ 

내가 원하는 것은 종료 코드를 사용하여 SSH 클라이언트를 즉시 종료하도록 하는 것입니다. 그러면 잘못된 호스트로 전달된 포트에 대해 명령을 실행하는 대신 실패를 보고하는 논리를 스크립트에 넣을 수 있습니다.

답변1

SSH 구성 옵션이 있습니다(에서 ssh_config(5)):

전달 실패 시 종료
모든 요청에 ​​대해 동적, 터널링, 로컬 및 원격 포트 전달을 설정할 수 없는 경우 ssh(1)가 연결을 종료해야 하는지 여부를 지정합니다. 인수는 "예" 또는 "아니오"여야 합니다. 기본값은 "아니요"입니다.

따라서 SSH 구성에 다음을 추가할 수 있습니다.

ExitOnForwardFailure yes

또는 명령줄에서:

$ ssh -o ExitOnForwardFailure=yes blah

관련 정보