로컬/원격 상황에 맞게 호스트 이름 조정

로컬/원격 상황에 맞게 호스트 이름 조정

저는 로컬 SSH 서버를 설정했으며 다음과 같은 깔끔한 별칭을 사용하여 로컬 네트워크에서 해당 서버에 액세스하고 싶습니다.

~/.ssh/config:

Host myserver-local
HostName 192.168.2.8
User iago-lito
Port 22

원격으로 액세스하기 위해 설정했습니다.IP 없음액세스할 수 있는 계정통과하다dyndns IP 확인을 위해 저는 다른 네트워크에서 액세스할 때 다음과 같은 깔끔한 별칭을 사용하고 싶습니다.

~/.ssh/config:

Host myserver
HostName myserver.ddns.net
User iago-lito
Port 22

불행히도 내 라우터가 허용하지 않기 때문에NAT 루프백, 다음을 사용해야 합니다.

ssh myserver

내가 떠날 때:

ssh myserver-local

집에 있을 때...이로 인해 스크립트를 자동화하는 것이 매우 짜증나게 됩니다 scp.git push 등.

두 경우 모두 동일한 별칭이 작동하도록 하려면 어떻게 해야 합니까?

답변1

서버의 로컬 주소를 ping하고 결과에 따라 하나 또는 다른 .ssh/config 파일을 교환하는 스크립트를 작성할 수 있습니다. 예를 들어:

ping -c1 -W1 192.168.x.x

옵션은 카운트(예: 1핑) 및 대기(1초)입니다. ping의 반환 값을 사용합니다. - 0이 아니라 0을 찾았습니다. 찾을 수 없습니다.

네트워크에 연결되면 이 스크립트가 실행되도록 설정할 수 있습니다.

내용이 짧아서 죄송해요, 핸드폰으로 썼어요.

답변2

상당히 현대적인 OpenSSH를 사용하면 쉘 명령을 실행하여 Match블록을 선택할 수 있습니다.~/.ssh/config. am-on-home-network홈 네트워크에서 실행될 때 0을 반환하고 외부에서 실행될 때 1을 반환하는 스크립트가 있다고 가정해 보겠습니다 .

Match Host myserver exec "am-on-home-network"
HostName myserver
User iago-lito
Port 22

Host myserver
HostName myserver.ddns.net
User iago-lito
Port 22

의 경우 를 am-on-home-network사용하여 로컬 네트워크를 탐색할 수 있습니다 arp. 홈 라우터의 MAC 주소를 찾으세요. (많은 사설망이 동일한 범위의 사설 IP 주소를 사용하기 때문에 IP 주소 찾기는 신뢰할 수 없습니다.)

#!/bin/sh
timeout 0.2 arping -f -q -I eth0 12:34:56:78:9a:bc

MAC 주소를 집에 있을 때 컴퓨터에 표시되는 라우터 MAC 주소로 조정하세요. eth0홈 라우터에 연결되는 컴퓨터의 네트워크 인터페이스를 조정하십시오 .


순수 SSH 방법의 장점은 사용자 모드에서 수행할 수 있다는 점이지만 SSH에서만 작동하며 연결 ​​설정 지연이 크게 늘어납니다. 더 나은 해결책은 시스템 수준에서 DNS 서버를 실행하고 myserver.ddns.net로컬 네트워크에 있을 때 로컬 IP 주소와 전역 이름을 제공하도록 구성하는 것입니다.DNS엔드포인트 컴퓨터나 소규모 네트워크에서 실행하기에 적합한 작고 간단한 DNS 캐시 및 서버입니다. 컴퓨터에서 아직 DNS 캐싱을 실행하고 있지 않다면 일반 인터넷 사용이 조금 더 빨라질 것입니다. Ubuntu는 기본적으로 dnsmasq를 실행합니다.

/etc/dnsmasq.d/home-serverdnsmasq에서 다음 내용으로 파일을 만듭니다.

host-record=myserver.ddns.net,192.168.2.1

네트워크 시작 스크립트(배포판 어디에 있든)에 다음 스크립트를 추가합니다.

#!/bin/sh
comment=\#
if timeout 0.2 arping -f -q -I eth0 12:34:56:78:9a:bc; then
  comment=
fi
sed -i "\$s/^#*/$comment/" /etc/dnsmasq.d/home-server
service dnsmasq restart

시스템에 D-Bus를 통해 Dnsmasq가 설정된 경우 구성 파일을 편집하는 것은 최선의 선택이 아니며 작동하는지조차 모르겠습니다. dbus-sendarping의 출력에 따라 호스트 레코드 추가 또는 제거를 호출 해야 합니다 . 또는 NetworkManager를 사용하는 경우 홈 네트워크에 해당하는 연결에 호스트 항목을 설정하도록 구성하세요.

관련 정보