연결 컴퓨터에 역방향 SSH 연결을 구성하려면 어떻게해야합니까? 대한 SSH 연결을 시작하도록이

가까운 장래에 라우터 뒤에있을 많은 컴퓨터를 배포 할 것입니다. 각 라우터 및 포트 전달에서 동적 DNS를 설정하는 것은 불가능하므로 내 컴퓨터에 대한 TCP 연결을 시작하고 컴퓨터가 원격 컴퓨터에 대한 SSH 연결을 시작하도록이 시스템을 구성 할 수있는 방법이 있습니까? 그 연결?

IE :

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

이것이 가능합니까? 그렇다면 어떻게 할 수 있습니까?



답변

/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 번 포트로 다시 터널링됩니다. 여러 컴퓨터가있는 경우 각 컴퓨터마다 다른 포트를 사용해야합니다.

유스 케이스의 경우 스크립트에서이를 실행하여 데몬으로 만들고 링크가 끊어지면 주기적으로 다시 연결하려고 할 수 있습니다. 들어오는 연결을 처리하기 위해 컴퓨터 B/bin/true 에 쉘이있는 특수 계정이 필요할 것입니다 . 그런 다음 “콜홈”이 허용되는 각 컴퓨터에 단일 키 또는 여러 키를 설정할 수 있습니다.

A 컴퓨터 당신은을 찾을 수 있습니다 -n, -N그리고 -T단지 터널을 열고 원격 명령을 실행하려고하지 (백그라운드에서 실행할 수 있도록), 그리고 청각 장애를 만들 수 없습니다 유용한 옵션은 지역 입력에서 분리 할 수 있습니다.

데몬을 생성하는 가장 일반적인 방법은 이와 같은 네트워크 터널 설정에 적합하지 않습니다. 네트워크 연결 문제로 인해 벽을 뚫고 넘어갈 수 있습니다. 잠을 기다리는 간단한 루프가 트릭을 수행해야합니다. 컴퓨터 B 와 같은 문제가있는 경우 네트워크에 문제를 일으키고 시도로 파일을 로그하지 않지만 연결이 끊어지면 합리적으로 빨리 돌아올 수 있기 때문에 10 분은 좋은 수치 입니다.

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

이와 같은 스크립트는 부팅시 실행할 수 있습니다 /etc/rc.local. 컴퓨터에 로그인하기위한 첫 번째 변경은 컴퓨터 A 부팅 후 약 10 분 후에 시작됩니다 .