네트워크 의존적 ~ / .ssh / config?


15

사무실에서는 프록시없이 내부 컴퓨터에 연결할 수 있지만 외부 연결을위한 프록시가 필요합니다. 사무실 밖에서는 프록시없이 다른 외부 컴퓨터에 연결할 수 있지만 내부 컴퓨터에 연결하려면 2 개의 프록시 중 하나를 사용해야합니다.

사용중인 네트워크를 자동 감지하는 방법을 알아낼 수 있다면 ssh에게 적절한 구성 파일을로드하도록 지시 할 수 있습니까?

그렇지 않다면 적절한 구성 파일을 ~ / .ssh / config에 심볼릭 링크하기 위해 쉘 스크립트를 작성하는 것보다 더 우아한 해결책이 있습니까?

편집 : @ pcm과 JonnyRo가 내 질문을 이해했다고 생각하고 그들이 제안하는 것을 시도 할 것입니다.

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

답변:


11

프록시 구성 방법에 따라 두 상황에서 작동하는 SSH 구성 항목을 간단히 작성할 수 있습니다. 예를 들어 정기적으로 사용하는 하나의 네트워크에서 아웃 바운드 연결을하기 전에 중간 호스트로 ssh해야합니다. 기본적으로 다음과 같은 구성을 설정했습니다.

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

따라서 프록시를 사용할 필요가 없으면 간단히 명령을 실행하고 ssh myhost.example.org연결할 수 있지만 프록시가 필요할 때 명령을 실행합니다 ssh myhost.example.org%sshproxy.

%proxy비트를 자동으로 추가하는 일종의 별칭 또는 자동 완성 설정을 설정할 수 있다고 생각합니다 .


9

오래된 질문이지만이 스레드의 일부 아이디어가 도움이되었으며 이것이 내가 생각해 낸 해결책입니다.

먼저 프록시 서버 ssh 구성입니다.

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

그런 다음 서버 B 구성 :

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

여기서 아이디어는 기본 사례가 외부 사이트에서 연결되고 ProxyCommand가 프록시에 대한 ssh 연결을 시작한 다음 server-b에 연결한다는 것 입니다. 반면에 로컬 서브넷에 이미있는 경우 ProxyCommand가 비활성화되고 server-a에 대한 프록시 연결 이 이루어지지 않습니다.

현재 위치에 관계없이이 항목을 통해 항상 server-abc연결할있으며이 설정은 현재 위치를 파악하고 그에 따라 연결을 설정합니다. 들어 서버 XYZ , 그냥 같은 아이디어를 사용합니다.

나는 여기에 더 철저한 설명을했다 : http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/


7

-F 옵션을 사용하여 다른 구성 파일에서 선택할 수 있습니다. 두 가지 네트워크의 경우. 그런 다음 현재 사용중인 네트워크를 기반으로 다른 구성 파일을 사용하는 별명을 작성하거나 로그인 스크립트 설정에서 IP 주소를 기반으로 단일 별명을 작성할 수 있습니다.


감사! IP를 기반으로 스크립트를 작동시킬 수 없다면 -F가있는 별칭은 분명히 내 폴 백이 될 것입니다.
Nate Parsons

이것은 굉장합니다. 나는 단지 같은 질문을하려고했습니다. 새 터미널을 시작할 때 환경 변수를 설정하기 위해 이미 다른 옵션을 스크립팅했습니다. 환경에 따라 별칭을 만들거나 적절한 .ssh / config를 심볼릭 링크 할 수 있습니다.
newz2000

1

패턴에 대해 IP를 확인한 다음 적절한 쉘 스크립트를 심볼릭 링크하는 쉘 스크립트를 작성하십시오.

어떤 이유로 든 IP 범위가 가정과 직장에서 동일하면 DHCP 구성 DNS 서버가 포함 된 /etc/resolv.conf를 기반으로 전환 해보십시오.


0

.ssh / config의 "Host"옵션을 사용하면 대상에 따라 구성을 변경할 수 있습니다. 나는 포트 포워딩을 조정하고 내가가는 곳을 기반으로합니다.


0

과거 에이 질문을 살펴 봤으며 가능한 해결책 중 하나는 구성 파일에 해당 항목을 갖는 것입니다.

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

이런 식으로 외부에 있다면 $ ssh machine.inside_domain을 할 수 있습니다. 당신이 안에 있고 dns 해결하는 경우, 당신은 $ ssh 기계 수 있습니다. 그것은 나를 위해 잘 작동합니다.

어쩌면 누군가 가이 아이디어를 개선하고 DNS 구성을 변경하여 외부에 있고 SSH 진입 점을 사용하면 machine.inside_domain을 자동으로 해결합니다.

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