집에 없을 때 홈 네트워크에 있는 컴퓨터에 SSH를 통해 연결할 수 있도록 SSH 및 라우터 포트 전달을 설정했습니다. 현재 내 파일에는 두 개의 항목이 있습니다. .ssh/config
하나는 홈 네트워크에 있을 때를 위한 항목이고 다른 하나는 홈 네트워크에 없을 때를 위한 항목입니다.
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
이것은 효과가 있지만 나 자신이 일을 더 쉽게 만들 수 있는지 궁금합니다. 첫 번째 호스트 이름 항목이 실패하면 두 번째 호스트 이름 항목으로 대체되도록 여러 호스트 이름 항목을 나열하는 방법이 있었으면 좋겠습니다.
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
이렇게 하면 먼저 내 로컬 네트워크의 호스트에 연결을 시도하고 해당 호스트가 존재하지 않으면 IP가 없는 동적 호스트 이름을 사용하여 연결을 시도합니다. 두 호스트 이름을 모두 입력하려고 시도했지만 ssh mycomputer
아무것도 수행하지 못하도록 차단만 실행했습니다.
키를 사용하기 위해 비밀번호 인증을 꺼두었기 때문에 홈 네트워크에 있지 않을 때 실수로 로컬 네트워크에 있는 컴퓨터에 연결하면 비밀번호가 작동하지 않습니다.
첫 번째 호스트 이름이 작동하지 않는 경우 시도할 대체 호스트 이름을 지정할 수 있습니까?
답변1
비록 못생겼지만 내 생각에는할 수 있다이를 수행하려면 포트 노킹에 대한 종료 상태 기준을 사용하십시오 exec
.Match
Host mycomputer
Match exec "nc -z 192.168.1.11 %p"
HostName 192.168.1.11
Match !exec "nc -z 192.168.1.11 %p"
HostName my.no-ip.dynamic
이것이 "귀하의" 홈 네트워크에 있는지 실제로 알려주는 것은 아닙니다. 단지 동일한 주소/포트에서 수신 대기하는 서비스가 있는 동일한 주소 범위를 가진 개인 LAN 세그먼트에 있다는 것입니다.
답변2
그게 내가 사용하는 방법이야
Match host mycomputer exec "nc -w 1 -z 192.168.1.11 %p"
HostName 192.168.1.11
Match host mycomputer # fallback
HostName my.no-ip.dynamic
Host mycomputer
# ... other configs
Host not-my-computer
# ... other configs
ssh_config에는 들여쓰기된 블록과 같은 것이 없습니다. match 문을 특정 호스트로 제한하려면 전체 조건을 설명해야 합니다.
nc
(connection timeout 1s) 옵션을 제공하여 오랜 대기 시간을 피할 수 -w 1
있으며 다음 동작을 활용하여 여러 호출을 피할 수 있습니다.nc
일치에는
조건부 블록이 도입됩니다. "일치" 줄의 모든 조건이 충족되면 다음 줄의 키워드는 다른 "일치" 줄이나 파일 끝까지 구성 파일의 전역 섹션에 설정된 키워드를 재정의합니다. 조건을 충족하는 둘 이상의 일치 블록에 키워드가 나타나는 경우 해당 키워드의 첫 번째 인스턴스만 적용됩니다.
답변3
HostName
아니요. 한 항목에 여러 개의 가 지정된 경우 Host
첫 번째 항목만 승인됩니다.
$ grep -A5 Host .ssh/config
Host test
HostName fake.tld.xyzzy
HostName real.example.com
HostName 127.1.2.3
User username
$ ssh test
ssh: Could not resolve hostname fake.tld.xyzzy: Name or service not known
답변4
예약 된 일들: @reboot ~/.ssh/scripts/distant_check.sh ~/.ssh/scripts/distant_check.sh: ping -c1 [로컬 서버 IP] 만약 [ $? -eq 0 ]; cp ~/.ssh/config_local ~/.ssh/config 기타 cp ~/.ssh/config_distant ~/.ssh/config 필리핀 제도