가정용 컴퓨터에 대한 SSH


21

집에 SSH와 VNC를 사용하여 학교에서 액세스하고 싶은 컴퓨터가 여러 대 있습니다. 이를 위해 정적 IP를 제공했습니다.

  • 192.168.1.50 : Windows
  • 192.168.1.51 : 우분투
  • 192.168.1.52 : 라즈베리 파이 / Raspbian

SSH는 포트 22를 사용하므로 라우터 에서이 포트를 192.168.1.51:22로 전달할 수 있지만이 방법으로 내 Raspberry Pi에 SSH를 연결할 수 없습니다. 두 컴퓨터에 모두 액세스 할 수 있도록 설정할 수있는 방법이 있습니까?


10
다른 ssh 포트를 사용할 수 있습니다. Windows에서 얼마나 어려운지 알지 못하지만 Linux에서는 별표 가 아닌 포트로 쉽게 변경할 수 있습니다. 이 방법으로 포트 22를 전달하여 머신을 변경하고 (비 변경) 다른 포트 (비표준)를 RaspberryPi에 전달할 수 있습니다.
bistoco

2
@Melebius, 그것은 오래되었지만 여전히 좋은 독서입니다. 나에게 중요한 부분은 "내가 시도한 기본 논증 : 보안을 통해 모호성을하지 마십시오."입니다. . 즉, 우분투 또는 파이 포트를 변경할 필요가 없으며 다른 라우터 포트를 각 22 개의 컴퓨터 포트로 전달하면됩니다.
bistoco

1
@bistoco 동의합니다. 그러나 OP는 외부에 대한 SSH 액세스를 공개하려고하며 이러한 경우 항상 보안을 고려해야합니다. 또한 컴퓨터에서 다른 포트를 설정해도 라우터에서 다른 포트 (= 포트 전달)를 활성화해야하기 때문에 OP의 문제를 해결하지 못합니다.
Melebius

6
@Melebius Off 주제이지만, 자동화 된 봇이 내 서버를 24/7로 두드리지 않기 때문에 22를 사용하지 않습니다. 실제 공격자 (또는 잘 작성된 스크립트)를 유지하지는 않지만 내 로그 항목의 수를 줄입니다.
Kaz Wolfe

4
그중 하나 (공개 액세스 가능)에 연결 한 다음 로컬 주소를 사용 하여이 주소에서 다른 주소로 연결할 수 있습니다.
tkausl

답변:


32

IPv6가 있다면 포트 포워딩도 필요 없습니다! MAC 주소를 기반으로 영구 IPv6 주소를 가져 오면 (ISP가 IPv6 작동 방식을 모를 경우를 제외하고는 동일하게 유지됨)이를 터널링하는 데 사용합니다. 로컬 NAT를 통하지 않고 액세스하기 위해 어디에서나 포트 포워딩을 사용하지 않아도됩니다. "그냥 작동합니다."

그러나 IPv6은 여전히 ​​전 세계에서 실제로 지원되지 않으며,이를 수행하려면 홈 인터넷 연결과 원격 인터넷 연결이 모두 작동하는 IPv6을 가져야합니다.

그러나 대부분의 사람들과 같고 IPv4 만있는 경우 여전히 방법이 있습니다! 일부 라우터에서는 다음과 같이 특정 소스 포트를 특정 대상 포트로 전달할 수 있습니다.

여기에 이미지 설명을 입력하십시오

이 예에서 포트는 22내 컴퓨터에 직접 전달되는 sheepdog포트가 있지만, 292포트에 전달되고있다 22coyote.

마지막으로, 라우터에이 기능이없는 경우 SSH는 포트에서만 실행되도록 제한되지 않으므로 포트를 변경할 수 있습니다 22. 원하는 것 (사용하지 않는 것)으로 설정할 수 있습니다.

에서 /etc/ssh/sshd_config(당신이 그렇게 편집에 대한 루트 필요 sudo nano /etc/ssh/sshd_config), 파일의 맨 위에있는 선이있다 :

# What ports, IPs and protocols we listen for
Port 22

이것을 원하는 것으로 변경하십시오.

# What ports, IPs and protocols we listen for
Port 2992

로 SSH 서버를 다시 시작하고 sudo service ssh restart라우터의 포트를 전달하십시오.


그러나이 유스 케이스의 경우 SSH 터널이 올바른지 여부를 고려할 것입니다. 아마도 홈 네트워크에 전용 VPN 서버를 설정해야합니까? 이를 통해 VPN에 필요한 적절한 보안 자격 증명이있는 경우 어느 곳에서나 전체 홈 네트워크 에 액세스 할 수 있습니다 . 또한 VPN의 오버 헤드가 약간 줄어 듭니다. 일반적으로 한 머신에 하나의 포트만 전달하면됩니다.


2
ISP가 IPv6을 지원하지 않는 경우 IPv6 터널 브로커를 사용하여 IPv6 주소를 얻을 수 있습니다.
André Borie

1
"이 기능"이란 포트를 다른 포트로 전달하는 것을 의미합니까?
Liu Siyuan

@LiuSiyuan Yep. 나는 그것이 이상하다는 것을 알고 있지만 그것을 처리 할 수없는 라우터를 보았습니다. 이전의 ISP 제공 라우터는 시도조차 할 수 없었습니다.
Kaz Wolfe

그 IPv6 부분을 얻지 못했습니다. IPv6 주소를 제공하는 모든 ISP가 네트워크의 각 장치마다 (일관된) 다른 ISP를 제공한다고 가정합니까?
jjmontes

1
ISP가 능력이 있다면 @jjmontes, 당신은 (모든 컴퓨터에 할당 하나 아직 충분히 아니면 덜하지만) 전체 / 64를 얻을 수 있습니다
카즈 울프에게

19

이 문제를 해결하는 쉬운 방법은 라우터의 다른 포트를 컴퓨터의 포트 22에 매핑하는 것입니다. 예를 들어 라우터에 다음 설정을 지정할 수 있습니다 (라우터에 IP가 있다고 가정 1.2.3.4)

1. 1.2.3.4:22   --> ubuntu:22
2. 1.2.3.4:8888 --> raspberrypi:22
3. 1.2.3.4:9999 --> windows:22 (or some other port)

그런 다음 ssh를 사용할 때 다음을 입력하여 사용하려는 포트를 지정하십시오

$ ssh <username>@<router ip> -p <your port>

이제 모든 머신에 연결할 수 있어야합니다.


11

컴퓨터 중 하나가 항상 작동 중임을 알고 있으면이를 ssh 프록시로 사용할 수도 있습니다.

외부 IP 주소 (예 : myhome.dyndns.com 또는 기타)에 도메인 이름을 설정했다고 가정 해 보겠습니다. 한 컴퓨터에 연결하는 것입니다 (라즈베리가 항상 켜져 있고 라우터에서 포트를 포트로 전달한다고 가정 해 봅시다) ), ssh 연결은 다음과 같습니다.

학교-> (라우터, 투명)-> 라즈베리-> 우분투 또는 창

이제 학교의 ~ / .ssh / config에 다음 줄을 추가하십시오.

Host ubuntu 192.168.1.51
    Hostname ubuntu (change to match your setup)
    User myraspberryuser  (change it ;-) )
    IdentityFile ~/.ssh/id_rsa   (The path to your private key, on the school computer, better on an usb key if public computer)
    ForwardAgent yes
    RequestTTY yes
    ProxyCommand ssh -W %h:%p %r@myhome.dyndns.com

그런 다음 연결하려면

ssh-add ~/.ssh/id_rsa # to do only once per session
ssh myuser@ubuntu (login without password)

이제 ssh ubuntu를 입력하면 컴퓨터가 먼저 라즈베리에 연결 한 다음 우분투 컴퓨터에 대한 ssh 세션을 시작합니다.

ssh 키를 통한 로그인 만 허용하도록 /etc/sshd.conf에서 비밀번호를 비활성화하려면 전달하려는 포트에 관계없이 사용하는 것이 좋습니다. 이런 식으로, 'ForwardAgent'매개 변수를 사용하여 라즈베리와 우분투에서 키를 설정하면 키를 잠금 해제하면 암호를 입력 할 필요가 없습니다. 이 방법으로 봇이 ssh에 로그인을 시도하더라도 비밀번호 로그온을 허용하지 않으므로 절대 로그인 할 수 없습니다.

또한 scp와 함께 작동합니다. scp foo ubuntu : / tmp / foo는 추가 매개 변수없이 동일한 설정을 사용합니다. 보너스 2,이 설정은 집에서 어떤 변경도 필요하지 않습니다. 내일 당신과 다른 컴퓨터가 ssh 설정에서 코드를 복사 / 붙여 넣기하고 호스트와 IP를 변경하면 라우터에서 새 포트를 열 필요가 없습니다


SSH의 중간체로 머신을 사용하는 데 단점이 있습니까? Raspberry Pi를 사용하여 네트워크 내부의 다른 컴퓨터에 연결하면 성능이 작업에 영향을 줍니까?
acourchesne

1
예, 라즈베리는 서버 및 클라이언트 역할을하므로 처리량을 제한 할 수 있습니다. 충분히 확신한다면 ssh 터널을 사용하여 동일한 결과를 얻을 수 있습니다. 이런 식으로 라즈베리는 서버로만 작동하지만 학교 PC는 두 명의 클라이언트를 수행해야합니다.
potens

4

나는 이것을한다-나는 rpi를 항상두고 라우터에 직접 꽂아두고 (가장 저렴하기 때문에) ssh에 넣고 다른 사람에게 튀어 오릅니다.

또한 ssh 파이프를 통해 GUI를 VNC / RDP하거나, 재미있게 보거나, 포트를 전달하여 데스크탑 컴퓨터의 서버를 비공개로 유지할 수 있습니다.

이 답변을 추가 한 이유는 당신에게 제안을하기 때문입니다.

1) 22가 아닌 다른 포트를 사용하십시오. PI에 22를 그대로 둘 수 있지만 라우터의 수신 포트를 10,000 이상으로 변경할 수 있습니다. 그렇지 않으면 하루에 수십 건에서 수백 건의 공격이 발생합니다. '익스플로잇이 발견되면 SSH 호스트를 실행하는 것으로 알려져 있습니다.

2) 사용자 이름 / 암호 대신 인증서를 사용하여 사용자 이름 / 암호 로그인을 완전히 비활성화하십시오.

3) 귀하의 IP 주소가 변경 될 수 있다면 dyndns 유형 서비스를 사용하여 DNS 호스트 햄을 얻으십시오 (Noip을 사용하십시오. 무료이며 IP 주소를 업데이트하기 위해 Linux 클라이언트를 지원합니다. 파이)). 이것을 무료로 제공하는 다른 회사가 여전히 있습니다.

4) pi (또는 ssh를 무엇이든)를 최신 상태로 유지하십시오 (sudo apt-get update). 나는 ssh가 지금까지 잘 심사되어 있다고 생각하지만 https의 의견도 믿었습니다 ...


3

이것이 답변이 아닌 의견으로 더 잘 맞는지 의심 스럽지만 어쨌든 여기에 게시 할 것입니다.

이 작업을 수행하기 전에 고려해야 할 사항 :

  1. 인터넷에 시스템을 열면 패치가 잘 설정되어 있고 보안 구성이 강화되어 있는지 확인하는 것이 좋습니다 (예 : 루트 로그인을 허용하지 않고 암호 대신 pubkey를 사용하지 마십시오).
  2. ISP에 따라 공용 IP (whatismyip.com 참조)가 변경 될 수 있으며 매일 변경되거나 거의 변경되지 않을 수 있습니다. 즉, 퍼블릭 IP를 파악하는 방법을 찾아야합니다. 매일 홈 네트워크에서 whatismyip.com을 방문하거나 앱을 만들거나 동적 DNS (DynDNS)를 사용하여 변경되는 퍼블릭 IP를 정적 도메인 이름에 매핑 할 수 있습니다.
  3. IPv6을 사용하여 IPv4 및 NAT와 관련된 모든 번거 로움을 우회하려면 IPv6와 통신하기 위해 장치, 라우터, ISP 등이 필요합니다. ISP가 IPv6를 지원하지 않을 때 도움이되는 몇 가지 서비스가 있지만, 장치와 라우터는 반드시 대화해야합니다.
  4. 인터넷에 더 많은 포트와 장치를 열면 공격 영역이 커집니다. 네트워크에서 점프 박스를 사용하고 인터넷에서 해당 장치에 대한 SSH 액세스 만 허용하는 것이 좋습니다. 점프 박스는 기본적으로 라우터를 통해 인터넷으로 포트 포워드되는 매우 강화 된 시스템입니다. 해당 박스에 연결되면이를 통해 내부 네트워크에 SSH로 연결할 수 있습니다. 점프 박스는 기본적으로 다른 라즈베리 파이가 될 수 있습니다. 가능한 한 적은 수의 서비스를 실행하여 다른 장치 중에서도 최대한 강화할 수 있도록 전용 장치를 사용하는 것이 좋습니다.
  5. (4a) SSH에 점프 박스를 설치하는 대신 학교의 장치에서 아웃 바운드 VPN 연결이 허용 된 경우 홈 네트워크를 탐색 할 수있는 VPN 서버를 설정할 수도 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.