포트 전달없이 라우터를 통한 ssh


11

나는 리눅스 서버를 가지고 있으며 라우터 뒤에 홈 네트워크에 넣고 싶다. 언젠가 외부 에서이 서버로 ssh해야하지만 라우터에 액세스 할 수 없기 때문에 포트 전달을 설정하고 싶지 않으며 라우터의 IP도 알지 못합니다.

내가 할 수있는 일은 리눅스 서버에 일부 프로그램을 넣는 것이므로 인터넷에 연결되면 끊임없이 다른 서버로 데이터를 보내 온라인으로 IP 주소를 알 수 있습니다. 그러나 외부에서 라우터 뒤의 서버로 ssh하는 방법이 있습니까? 네트워크 연결을 유지하는 NAT 또는 소켓과 같은 것?

고마워

답변:


24

당신이하고 싶은 것은 "my_other_server"와 같은 외부의 무언가 또는 두 서버가 얻을 수있는 다른 것으로 "리눅스 서버"에서 ssh입니다.

ssh 원격 포트 전달을 사용합니다.
[user@linux_server]$ ssh -R8022:localhost:22 my_other_server.com
설명 : my_other_server에 연결하고 포트 2222를 열어 포트 22에서 다시 전달하십시오.

my_other_server.com에서 포트 8022에서 localhost로 ssh하고 linux_server에서 linux_server로 트래픽을 전달할 수 있습니다.-> my_other_server tunnel [user@linux_server]$ ssh -p8022 localhost
설명 : linux_server로 전달되는 포트 8022에서 자신에게 연결

초기 linux_server-> my_other_server 터널 삭제에 문제가있는 경우 스크립트를 열어 두거나, keepalive 설정을 조정하거나, autossh를 사용할 수 있습니다.


1
고마워, 잘 작동합니다! 스크립트를 사용하여 열어두고 싶습니다. 다른 질문은 1000 개의 '리눅스 서버'와 하나의 'my_other_server'만 있으면이 방법으로 ssh 할 수 있습니까? 나는 그들 모두 다른 포트가 필요하다고 가정하고 더 좋은 방법이 있습니까?
Jiechao Li

글쎄요. 이제 linux_server를 사용 중이므로 거기에서 linux_server2 및 linux_server3로 ssh 할 수 있습니까? 가장 쉬운 방법입니다. 예, 8022를 사용하는 대신 8023, 8024를 사용하는 대신 여러 번이 작업을 수행 할 수 있습니다. 해당 경로로 이동하면 모든 포트 번호가 포함 된 "my_other_server"에 ~ / .ssh / config 파일을 빌드하십시오. ssh [port] localhost 대신 ssh [alias] 만 사용하면됩니다. 번거로울 것입니다.
MattPark

1
두 대의 컴퓨터로 이것을 설정할 수 있습니까? B를 A에 연결하고 A를 B를 통해 다시 연결합니까?
adamyonk

1
방금 했어요 작동하는지 확인할 수 있습니다. \ o /
adamyonk

그래, 남자 .. 분명히 알아 냈어. 당신은 같은 것을 사용할 수 있습니다 autossh를 열어 둘 수 있습니다.
MattPark

3

VPN을 사용하여이 작업을 수행 할 수 있지만 액세스 할 수없는 서버가 액세스 할 수있는 서버가 있어야합니다. 그런 다음 서버, PC 및 방화벽 서버에서 OpenVPN을 설정하고 활성화 client-to-client하면 완료됩니다. http://openvpn.net/howto.html


감사. 나는 이것을 조사하고 있지만 조금 복잡해 보인다. 올바르게 이해하면 라우터를 구성하지 않고 통신 할 수 있도록 두 서버 모두에 OpenVPN을 설치해야합니다.
Jiechao Li

바로 그거죠. 서버를 "서버"로 구성한 다음 구성에서 두 클라이언트를 함께 "클라이언트"로 연결합니다. 그러나 위에서 언급 한 리버스 SSH가 더 쉬운 것 같습니다.
Nathan C

3

이 답변은 허용 된 답변을 기반으로하지만 세부 정보를 추가하여 완료했습니다. 나는 이것이 나의 전문 지식이 아니기 때문에 보행자 설명에 대해 사과드립니다.

두 컴퓨터가, 가정 AB. 당신이 원하는 ssh에서 AB, 당신은 그들에 연결된 라우터의 모든 포트 포워딩을 할 수 없습니다.

허용되는 답변에서 알 수 있듯이이 S작업을 수행 하려면 서버 가 필요합니다. computer B에서는 ssh연결 을 허용 합니다 S. 그리고 컴퓨터에서 A, 당신은 S도달하기 위해 그 터널에 액세스합니다 B.

그러나 그 서버를 S어떻게 얻 습니까? 찾았습니다 serveo(link : https://serveo.net/ ). 매우 간단합니다. 아무것도 설치하거나 등록 할 필요가 없으며 무료입니다. 웹 사이트에 따르면 다음 단계는 다음과 같습니다.

  1. 컴퓨터의 별칭을 생각하십시오 B. 예를 들면 다음과 같습니다 computer_B_alias.

  2. 컴퓨터 B에서 실행하십시오 ssh -R computer_B_alias:22:localhost:22 serveo.net.

  3. 이제 컴퓨터 B에서 A다음을 실행하여 컴퓨터 에서 컴퓨터 에 액세스 할 수 있습니다 A. ssh -J serveo.net user@computer_B_alias여기서 user컴퓨터의 사용자 이름으로 대체해야 합니다 B.

PS : 물론 컴퓨터를 시작할 때 포인트 2를 자동 작업으로 만듭니다 B.

PSS : 시도하기 전에 ssh두 컴퓨터에 모두 설치되어 있는지 확인하십시오 . 우분투 sudo apt-get install ssh에게는 일을 할 것입니다.


1
고마워요, 이것은 내가 필요한 링크가 누락되었습니다. 서브 서비스가 다운 된 것 같습니다. 이 두 가지 대안이 유용하다는 것을 알았습니다 : ngrok & localhost.run !
DannyDannyDanny

1

답변을 찾는 데 오랜 시간이 걸렸지 만 지금 같은 사람을 찾는 데 도움이되기를 바랍니다.

NAT 뒤의 서버에 액세스하고 코드를 작성하지 않으려는 경우 아래 도구 중 하나를 선택하여 필요에 맞는 것을 사용할 수 있습니다.

위의 두 도구는 클라이언트를 설치하기 위해 Linux 시스템에 액세스 할 수 있다고 가정합니다.

  • 둘 다 웹 인터페이스를 사용하여 터미널에 액세스 할 수 있습니다
  • 자신의 중간 리버스 ssh 호스트가 필요하지 않습니다.
  • 설치가 매우 쉽습니다.
  • 둘 다 오픈 소스입니다

원격 콘솔 은 역방향 ssh를 위해 자신의 서버에만 연결할 수있는 반면 나는 tmate 서버 를 자신의 중간 서버 (역 ssh 용)에서 호스팅 할 수 있으므로 개인적으로 tmate를 더 선호합니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.