포트 전달이 실패 할 때 SSH가 실패하도록 할 수 있습니까?


38

-R 3690:localhost:3690바인딩이 이미 원격 호스트의 포트에 존재하는 경우 원격 포트 전달을 수행 하면 다음 경고가 표시됩니다.

Warning: remote port forwarding failed for listen port 3690

경고를 표시하는 대신 ssh가 실패하는 방법이 있습니까 (예 : 0이 아닌 리턴 코드로 종료)?


실제로 터미널 채널 또는 전달 만해야합니까?
Ignacio Vazquez-Abrams

1
@ IgnacioVazquez-Abrams : 그냥 전달.
Matt Joiner

답변:


62

운영

ssh -o "ExitOnForwardFailure yes" ...

또는 넣어

ExitOnForwardFailure yes

~/.ssh/config. 자세한 내용은 ssh_config(1)사용 man을 참조하십시오.


불행히도 OpenSSH 4가 있습니다.이 기능이 추가 된 시점을 알려줄 수 있습니까?
매트 소목 장이

2
아니요, 잘 모르겠습니다. 버전 5 기능 일 수 있습니다. 그러나 버전 4는 이제 몇 년이되어야하며 항상 보안 수정 이 있습니다. 서버를 직접 업그레이드 할 수없는 경우 서버 관리자에게 해당 버전을 계속 사용하는 것이 안전하다고 생각하는지 물어볼 수 있습니다.
앤드류 Schulman

명시 적으로 지정하지 않으면 bind_addressssh가 여전히 실패하지 않을 수 있습니다. 예를 들어 다른 사용자가 이미 ipv6 localhost에서 수신 대기중인 [::1]:3690경우 ssh는 ipv4 만 바인드 할 수 있으며 127.0.0.1:3690불평하지 않습니다. 그러나 svn 클라이언트는 아마도 공격자의 ipv6 소켓을 선호 할 것입니다. 보다 나은 사용을 위해-R [::1]:3690:localhost:3690 -R 127.0.0.1:3690:localhost:3690
rudimeier

3
공백과 인용 필요를 피하기 위해 ssh -o ExitOnForwardFailure = yes를 사용할 수도 있습니다.
자유 공간

1

대상 호스트에서 bash 스크립트를 사용하여 전달이 올바르게 열렸는지 확인합니다. 포트 연결에 문제가있는 경우 SSH 연결에서이를 실행하고 종료합니다. 예 :

클라이언트 측 스크립트 : (포트 포워딩 설정에 .ssh / config 사용)

#!/bin/bash    

while true; do
    echo -n starting at : "
    date
    ssh user@server bin/sshloop.sh
    echo "got back, sleeping 17 "
    sleep 17
done 

서버 측 스크립트 (bin / sshloop.sh)

#!/bin/bash

while true; do 
  echo $(date)" : SSH Reverse 1090:80, 1232:22 From Server to Client"
  sleep 17
  if ! netstat -an | grep -q ":::1090 " ; then
     echo "1090 forward missing, bailing out"
     exit
  fi
done

어쩌면 -dmS 화면에서 클라이언트 쪽 스크립트를 실행할 수도 있습니다.


2
피하려고하는 경우 포트 전달이 이미 존재하고 경고가 표시됩니다. 이 스크립트는 포트에 대한 기존 바인딩을 실패가 아닌 성공으로 처리한다고 생각합니다.
Matt Joiner

1
사실입니다. 내 문제는 시간이 초과되기 전에 몇 분 동안 포트를 열어 두는 동일한 스크립트에서 발생했습니다. Thsi 스크립트는 포트가 다시 열린 후 몇 번 종료했다가 다시 실행됩니다. 누가 포트를 소유하고 있는지 알아야 할 경우 sudo와 함께 netstat -anp를 실행하고 grepping 할 수 있습니다.
Antti Rytsölä Circles 문의

@ AnttiRytsöläCirclesConsult : 프로세스 이름을 확인할 때 프로세스 이름을 "ssh"와 일치 시켜도 현재 해당 포트를 전달하고있는 SSH 클라이언트를 알려주지 않으므로 프로세스 ID를 확인해야 할 수도 있습니다.
Piskvor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.