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

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

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

대상 서버에 접속했지만 잘못된 사용자이고 공개 키 인증이 없습니다.

생각하다이 시점에서 내 질문은 이 수신 거부 방법을 활용할 때 ForwardAgent내 SSH 구성/환경 전체 또는 키만 통과하는 것입니다. 열쇠만 있다면 전자를 어떤 식으로든 활용할 수 있나요?

내 SSH 버전은 5.9v1이고 게이트웨이는 5.9v1이며 대상은 5.3p1입니다. 나는 5.4에 도입되었다고 생각 -W하지만, 마지막 상자에는 문제가 되지 않습니까? 오래된 학교를 활용하는 것도 nc다르지 않은 것 같습니다.

줄의 각 상자에 수동으로 SSH를 연결할 수 있음을 확인했습니다. 이렇게 하면 게이트웨이에 있을 때 I can ssh targetbut I can 처럼 호스트 이름 별칭 정보가 전달되지 않음을 나타냅니다 ssh target.example.com. 이것은 pubkey 인증과 함께 작동합니다. 게이트웨이와 대상의 사용자 이름은 동일하므로 구성이 푸시되지 않은 경우에도 작동합니다.

또는 이와 유사한 구성이 이 정보를 푸시할 수 없는 경우 ForwardAgent이 정보와 함께 게이트웨이에 .ssh/config를 유지하여 이를 해결하는 가장 건전한 방법은 무엇입니까?

답변1

와, 이런 질문을 해주셔서 감사합니다. SSH를 완전히 활용하는 사람을 보는 경우는 거의 없으며 이 질문은 몇 가지 영역에 해당됩니다.

이것은 ProxyCommand문제가 되지 않습니다. 이는 ProxyCommand단순히 원격 클라이언트와 대화를 시도하기 전에 준비 작업을 수행하도록 로컬 SSH 클라이언트에 지시합니다. 예, 이 경우에는 다른 SSH 세션과 대화하지만 해당 세션은 단순히 -W입력을 받아 다른 시스템으로 전달합니다. 준비 SSH 세션은 완전히 독립적이라고 생각할 수 있습니다. 불가피한 자동차 비유: A 지점에서 B 지점으로 이동하기 위해 페리를 타야 했는지 여부에 관계없이 자동차는 동일한 자동차입니다.

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

형식 문제 입니다 .ssh/config. 두 번째와 세 번째 debug1 줄을 확인하세요. 에서 적용되는 Host 스탠자를 나열합니다 .ssh/config. 작동 $ ssh target.example.com%via하지만 사용자 이름과 키가 잘못되었습니다. 음, 에 대한 스탠자는 Host target읽히지 않습니다(올바른 사용자 이름과 키 파일을 제공합니다). 어떤 스탠자가 사용됩니까? *그리고 *%via.

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

그래서 당신이 질문을 하면 기계 .ssh/config에 설정하는 것이 gateway도움이 될 것입니다. 아니요, 그렇지 않습니다. 결코 읽히지 않을 것입니다. 모든 일은 로컬 컴퓨터에서 이루어집니다.

내가 설명한 모든 내용은 $ ssh target.example.com%via작동하지 않는 이유에 대해서만 답변합니다.

당신은 $ ssh target%via. 맞아요, 그게 더 편해요. 호스트 이름으로 target찾을 수 없기 때문에 짧은 형식이 실패합니다 . 해결되지 않습니다. SSH가 분출되지 않는 이유는 무엇입니까 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

관련 정보