연결 컴퓨터에 역방향 SSH 연결을 구성하려면 어떻게해야합니까?


20

가까운 장래에 라우터 뒤에있을 많은 컴퓨터를 배포 할 것입니다. 각 라우터 및 포트 전달에서 동적 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

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


답변:


21

/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 분 후에 시작됩니다 .


1
좋은. 그래서 기본적으로 각 원격 컴퓨터가 로컬 SSH 포트를 로컬 컴퓨터의 포트로 터널링합니까? 각 시스템이 필요할 때만 연결을 터널링하는 것이 좋습니다. 각 시스템에서 연결 유지 HTTP 연결을 열고 역방향 연결을 시도하여 XML 데이터를 푸시하여 관리를 쉽게하고 모든 포트를 방해하지 않도록 할 수 있습니다. 감사!
Naftuli Kay

@TKKocheran : 선택할 수있는 포트가 꽤 있습니다. 특히 키오스크보다 더 많은 포트가 있습니다. http 연결을 열린 상태로 유지하는 것보다 SSH 터널을 열린 상태로 유지하는 방법은 무엇입니까?
Caleb

나는 당신이 옳다고 생각합니다.하지만 그렇게 할 수는 있지만 포트를 기계에 매핑하고 어느 것이 어느 것인지 기억해야하지만 다른 경로는 느리게 인스턴스화됩니다. 즉 요청시 SSH 터널을 만듭니다.
Naftuli Kay

1
@TKKocheran : 어느 쪽이든 매핑을 수행해야합니다. 그렇지 않으면 게으른 인스턴스화조차도 서로를 클로버하려는 상황이 발생할 수 있습니다.
Caleb

1
그것이 일반적으로 적용 가능한지 모르겠지만, sshd 설정이 시작되었습니다/etc/ssh/sshd_config
gc5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.