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 target
but 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*
일치합니다 .target
target%via
target.example.com
target.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