가까운 시일 내에 라우터 뒤에 많은 시스템을 배포할 예정입니다. 각 라우터에서 동적 DNS 및 포트 전달을 설정하는 것은 불가능합니다. 따라서 내 컴퓨터에 대한 TCP 연결을 시작하도록 이러한 컴퓨터를 구성한 다음 내 컴퓨터가 연결: 어떤 연결을 통해 원격 컴퓨터에 대한 SSH를 시작하도록 하는 방법이 있습니까?
즉:
COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A
가능합니까? 그렇다면 어떻게 할 수 있습니까?
답변1
/etc/ssh/sshd
~을 위한컴퓨터 B놓다:
AllowTcpForwarding yes
TCPKeepAlive yes
~에서컴퓨터 A:
$ ssh -R 2222:localhost:22 ip.of.computer.b
~에서컴퓨터 B:
$ ssh localhost -p 2222
2222는 제가 선택한 임의의 고급 슬로건입니다. 그런 다음 컴퓨터 B의 포트는 컴퓨터 A에서 시작된 SSH 연결을 통해 포트 22로 다시 터널링됩니다. 컴퓨터가 여러 대인 경우 컴퓨터마다 다른 포트를 사용해야 합니다.
사용 사례의 경우 스크립트에서 실행하여 데몬으로 설정하고 링크가 중단되면 주기적으로 다시 연결을 시도할 수 있습니다. 쉘이 있는 특별 /bin/true
계정이 필요할 수 있습니다.컴퓨터 B들어오는 연결을 처리합니다. 그런 다음 콜백을 허용하는 각 컴퓨터에 대해 하나 이상의 키를 설정할 수 있습니다.
존재하다컴퓨터 A및 옵션을 -n
사용하면 로컬 입력 연결을 끊고(백그라운드에서 실행할 수 있도록) 원격 명령을 실행하는 대신 tty를 생성하지 않고 터널을 열 수 있습니다.-N
-T
데몬을 생성하는 대부분의 기존 방법은 이러한 네트워크 터널을 설정하는 데 제대로 작동하지 않습니다. 네트워크 연결 문제로 인해 벽을 넘어 통과하려고 시도할 수 있습니다. 수면 대기를 포함하는 간단한 루프가 그 효과를 발휘할 것입니다. 10분은 좋은 숫자입니다. 왜냐하면 뭔가 잘못되면(예:컴퓨터 B오프라인), 연결이 끊어진 경우에도 상당히 빠르게 복구할 수 있습니다.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
이러한 스크립트는 시작 시 시작되고 실행될 수 있습니다 /etc/rc.local
. 컴퓨터에 대한 첫 번째 변경 사항은 약 10분 후에 시작됩니다.컴퓨터 A부츠.