ProxyCommand 및 netcat 모드를 사용할 때 ssh가 구성에서 호스트 이름을 확인하도록합니다.


16

ssh 연결을 수신 거부하는 몇 가지 범용 옵션을 설정하려고합니다. 다음은 내 ~/.ssh/config파일이며 약자입니다.

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

내가 사용하는 경우 *%via사용하는 Host별칭을, 내가 얻을 :

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

그러나 내가 활용하면

% ssh target.example.com%via

대상 서버를 쳤지 만 잘못된 사용자로서 pubkey 인증이 없습니다.

내가 생각하는 내 질문에,이 시점에서, 사용할 때, 수신 거부의이 방법을 않는 것입니다 ForwardAgent, 내 SSH를 설정 / 전체 환경, 아니면 그냥 키를 통해 전달합니다. 열쇠 만 있으면 전자가 어떤 식 으로든 활용 될 수 있습니까?

내 ssh 버전은 5.9v1이고 게이트웨이는 5.9v1이며 대상은 5.3p1입니다. 나는 -W5.4에서 소개 되었다고 생각 하지만, 최종 상자에 대해서는 중요하지 않습니까? 고등 학교를 이용하는 것은 nc다르지 않습니다.

줄의 각 상자에 수동으로 ssh 할 수 있음을 확인했습니다. 그렇게하면 게이트웨이에서 호스트 이름 별명 정보가 전달되지 않음을 알 ssh target수 있습니다 ssh target.example.com. 이것은 pubkey auth와 함께 작동합니다. 게이트웨이와 대상은 우연히 동일한 사용자 이름을 가지므로 구성을 푸시하지 않으면 이것이 작동합니다.

경우 ForwardAgent또는 이와 유사한 설정이 정보를 보낼 수 없다, 그것의 주위에 얻을 수있는 sanest 방법은이 정보와 스푸핑 / 설정에 게이트웨이를 유지, 무슨 일이야?

답변:


14

와,이 질문을 해주셔서 감사합니다. 누군가 SSH를 완전히 이용하는 것은 드물며이 질문은 몇 가지 영역에서 발생합니다.

이것은 ProxyCommand문제 가되지 않습니다 . 이는 ProxyCommand단순히 원격 ssh 클라이언트와 통신을 시도하기 전에 로컬 ssh 클라이언트에게 준비 할 것을 지시합니다. 예를 들어, 우리는 다른 ssh 세션과 대화하지만 그 세션은 -W단순히 입력을 가져 와서 다른 컴퓨터로 전달합니다. 준비 ssh 세션은 완전히 독립적이라고 생각할 수 있습니다. 피할 수없는 자동차 비유 : A 지점에서 B 지점으로 이동하기 위해 페리를 타야했는지 여부에 관계없이 자동차는 동일한 차량입니다.

이것은 ForwardAgent문제 가되지 않습니다 . ForwardAgent로컬 클라이언트는 원격 세션 환경 내에서 로컬 키를 사용할 수있는 기능을 제공합니다. 원격 세션 설정을 지나치지 않았습니다.

그것은이다 .ssh/config형식의 문제를 해결합니다. 두 번째 및 세 번째 debug1 행을 참고하십시오. 여기에서 귀하의 호스트 스탠자 적용 대상을 나열합니다 .ssh/config. 당신은주의 $ ssh target.example.com%via일을하지만, 잘못된 사용자 이름과 키 등. 에 대한 스탠자 Host target가 읽히지 않습니다 (올바른 사용자 이름과 키 파일을 제공함). 어떤 스탠자가 사용됩니까? *그리고 *%via.

이 옵션을 통과시키는 방법? 흥미롭게도 와일드 카드는 길이가 0 인 문자열과 일치합니다. Host target*일치 target, target%via, target.example.comtarget.example.com%via.

그래서 당신은 질문 .ssh/config을하고 gateway기계 도움말을 설정합니다 . 아닙니다. 읽히지 않을 것입니다. 로컬 머신에서 모든 일이 일어나고 있습니다.

내가 설명한 모든 $ ssh target.example.com%via것은 왜 작동하지 않는지 대답 합니다.

당신은 선호합니다 $ ssh target%via. 맞습니다. 더 편리합니다. 호스트 이름으로 target찾을 수 없기 때문에 짧은 형식이 실패합니다 . 해결되지 않습니다. ssh spewing이 아닌 이유는 무엇 ssh: Could not resolve hostname target: Name or service not known입니까? 이 ( ProxyCommand가) 이미 성공적으로 설정 되었기 때문 입니다. ssh 연결의 요소가 작성되었지만 예상치 못한 위치에서 호스트 이름 오류가 발생하여보다 일반적인 메시지로 폭격하고 있습니다. 디버그 정보를 개선 할 수있는 위치를 식별하는 데 도움이되는 버그 보고서를 제출할 것입니다.

최종 논평 :

나는 Host *%via구문을 좋아한다 . 깨끗하지만 유연합니다. 나는 이전에 보았고 어디로 가야할지 결정하기 위해 Host *+*첫 번째와 마지막 부분을 모두 사용합니다 %h(ost). 그러나 그 문제를 해결하려면 약간의 노력이 필요합니다. 링크 : http://wiki.gentoo.org/wiki/SSH_jump_host

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