SSH 구성-다중 프록시 구성


3

SSH 프록시 설정을 관리하는 쉬운 방법을 시도하고 싶습니다. 나는 종종 세 곳의 다른 곳에서 서버로 SSH를 연결하고 싶어합니다. 두 곳 각각에는 외부 프록시 서버가없는 곳에서 코르크 마개를 사용해야하는 자체 프록시 서버가 있습니다. . ~ / .ssh / config 파일을 설정하여 사용할 ProxyCommand를 인식 할 수있는 방법이 있습니까? 내가하고 싶은 이유는 crontab을 사용하여 SSH를 통해 서버를 통해 터널링하도록 Fetchmail을 설정하고 싶기 때문에 내가 어떤 네트워크에 있더라도이 작업을 수행하는 방법을 알 수 없기 때문입니다.

건배.

답변:


2

다음에서 호스트 별 구성을 수행 할 수 있습니다 .ssh/config.

Host ex1
HostName proxied.example.com
User myuser
ProxyCommand /usr/local/bin/corkscrew proxy.example.com 8080 %h %p

Host ex2
HostName nonproxy.example.com
User myuser
IdentityFile id_rsa

그래서

ssh ex1

proxied.example.com코르크 마개로 ssh 하고 호출합니다.

ssh ex2

폴더 nonproxy.example.com에서 ssh 하고 ID 파일을 사용 .ssh합니다.

자동 감지

코르크 프록시가 수행하는 작업은 로컬 프록시를 통해 연결을 작성하고 ssh가 연결하기 위해 표준 입력을 허용합니다. 어떻게 든 원격 ssh 서버에 연결하고 표준 입력을 받아들이면 ProxyCommand로 무엇이든 사용할 수 있습니다.

예를 들어, netcat을 사용하여 원격 호스트에 연결하고 ssh는 표준 입력을 통해 netcat과 통신 할 수 있습니다.

ProxyCommand nc %h %p

이 프록시 명령을 사용하여 서버에 ssh를 실행하면 ssh는 nc를 호출하여 포트 22에서 원격 호스트에 tcp 연결을 설정 한 다음 ssh는 nc의 표준 입력을 통해 명령을 보냅니다.

이것은 nc가 ssh 대신 tcp 세션을 설정하도록하면 아무런 목적이 없습니다. 예를 들어 "proxytest"라는 래퍼 스크립트를 만들 수있는 경우를 제외하고는 nc를 사용하여 직접 연결을 설정하고 corkscrew를 사용하려고 시도했는지 확인하는 테스트를 수행했습니다.

if nc -z $1 $2; then
   exec nc $1 $2  # try to connect directly
else
   exec corkscrew $3 $4 $1 $2  # set up proxy connection

따라서 이들 중 하나가 작동하면 ssh가 netcat 또는 타래 송곳에서 연결할 수있는 표준 입력이 있습니다. 따라서 ssh 설정은 다음과 같습니다.

ProxyCommand proxytest %h %p proxy.example.com 8080

적절한 테스트 및 오류 검사와 함께 시도해 볼 수 있는 준비된 스크립트가 있습니다 . "기타 트릭"섹션으로 스크롤하십시오.


좋아,하지만 다른 프록시를 통해 매번 같은 호스트에 SSH를 사용한다면 어떻게 될까? 어떤 네트워크에 있는지 자동으로 감지 할 수 있도록 자동화하려면 어떻게해야합니까? 나는 이미 ProxyCommand와 호스트 앨리어싱을 설정하여 'ssh server'로 이동하여 올릴 수 있지만 스크립트가 가능하도록 자동으로 설정하고 싶습니다. 내가하고 싶은 일이 가능한지 확실하지 않습니다.
NOP

1
ProxyCommand 항목없이 Host ex3동일한 목적지를 가리키는 것을 사용할 수 Host ex2있습니까? 이것이 자동이 아니라는 것을 알고 있습니다.
Paul

그래, 그게 내가 이미 가진 것입니다. 자동적 인 것은 내가 원하는 것보다 Fetchmail과 함께 스크립팅 할 수 있습니다.
NOP

1
죄송합니다. 내가 놓친 자동 부분으로 답변을 업데이트했습니다.
Paul

굉장해, 내가 원하는 것 같아 나는 이것을 갈 것이다. 정말 고마워. :-)
NOP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.