저는 로컬 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-server
dnsmasq에서 다음 내용으로 파일을 만듭니다.
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-send
arping의 출력에 따라 호스트 레코드 추가 또는 제거를 호출 해야 합니다 . 또는 NetworkManager를 사용하는 경우 홈 네트워크에 해당하는 연결에 호스트 항목을 설정하도록 구성하세요.