역 ssh 터널 연결이 끊어진 후 원격 호스트에서 sshd 프로세스 걸기 > $PIDFILE

나는 역방향 터널을 이렇게 설정했다 :

function startconn () {
    ssh -N -b ${SRCIP} -X -R ${REMOTEIP}:${REMOTEPORT}:${LOCALIP}:${LOCALPORT} root@${REMOTEIP} &
    SSHPID=$!
    echo "$SSHPID" > $PIDFILE
    echo "Forwarding port ${REMOTEPORT} at ${REMOTEIP} to ${LOCALIP}:${LOCALPORT}"
}

SRCIP 네트워크를 통해 사용할 수있는 백업 링크를 통해 REMOTEPORT @ REMOTEIP을 전달합니다 (SRSIP가 192.168.5.2 인 보조 NIC가 192.168.5.1의 백업 링크 게이트웨이에 연결됨).

잘 작동하지만 문제가 있습니다. ssh 연결이 끊어진 경우 (예 : 게이트웨이 등의 재시작에 의해 일반적으로 역방향 터널 ssh 세션의 TCP / IP 연결을 끊는 모든 것, REMOTEIP에서 sshd 프로세스가 걸려서이 포트 (30200는 REMOTEPORT)에 역방향 터널을 재설정하는 것을 방지합니다.

netstat -anp | grep 30200
tcp        0      0 0.0.0.0:30200           0.0.0.0:*               LISTEN      8772/sshd: root

내가 지금 볼 수있는 유일한 실행 가능한 솔루션은 REMOTEIP에 대한 연결이 끊어져서 로그온하는 재접속 스크립트이며 역방향 터널을 다시 설정하기 전에 sshd 프로세스를 “수동으로”종료하는 것입니다.

원격 sshd 프로세스가 REMOTEIP 포트를 차단하는 것을 방지하는 더 똑똑한 / 덜 성가신 방법이 있습니까?



답변

그래 그거야 오토 슈 , 래퍼 주위에 SSH 그것을 위해 정확하게 설계되었습니다. 그만큼 autossh 맨 페이지 상태 :

autossh는 ssh의 복사본을 시작하고 그것을 모니터링하고, 필요하다면 다시 시작하여 트래픽이 중단되거나 멈추게하는 프로그램입니다.

12 대 정도의 컴퓨터에서 사용하며 가동 시간은 100 %입니다.

나는 다음과 같이 사용한다 : 나는이 선을 배치한다.

   su my_name -c /home/my_name/bin/auto

~ 안에 /etc/rc.local 파일을 사용하여 역방향 터널을 시작합니다 (A라고 함). 실행 가능 파일 (* chmod 755 auto)은 다음과 같습니다.

  #!/bin/sh

 /usr/lib/autossh/autossh -M 6527 -f -p 5298 -2 -N -R 8400:localhost:2222 userB@remote_hostB -i /home/my_name/.ssh/crypto-keyB

여기서 5298은 원격 호스트의 ssh 포트 (B라고 함)입니다. 2222는 호출하는 시스템 A의 ssh 포트입니다. 포트 6527은 연결 상태를 확인하는 데 사용됩니다. 이것이 작동하려면 원격 서버 (A) 방화벽에서 열어야합니다.

이것은 역방향 터널을 설정합니다. 원격 서버 (B)의 터미널에서 이제 명령을 통해 역방향 터널 (A)을 시작하는 시스템에 연결할 수 있습니다.

 sh -Y userA@localhost -p 8400 -i /home/userB/.ssh/crypto-keyA

연결하는 것을 기억해야합니다. 일단 터널을 설정하기 전에 어느 한 머신에서 다른 머신으로 다른 머신으로 옮겨 가야합니다. 보통 질문에 대해 대화식으로 대답 할 필요가 있기 때문에 : 머신 A가 암호 키로 응답했습니다 …; 알려진 호스트에 기록해야합니까?

그것이 끝나면, 당신은 잘 가게됩니다. 그것은 기본적으로 화재와 잊기입니다.