연결할 주소를 생성하는 함수 호출을 수행하여 SSH 연결의 대상 주소를 확인하고 싶습니다. ProxyCommand
온라인에서 찾을 수 있는 모든 예제는 이 -W
플래그를 사용하여 두 번째 시스템으로 이동합니다. 두 번째 컴퓨터에서 시도했는데 localhost
훌륭하게 작동했지만 SSH 인증이 두 번 필요했는데 마음에 들지 않았습니다.
두 번째 홉으로 전달하지 않고 내부 통화를 시도하고 있습니다 ssh
. ProxyCommand
이제 내 .ssh/config
파일에는 다음이 있습니다.
Host test
ProxyCommand ssh user@address
이렇게 하면 ssh test
연결이 잘 되는 것 같은데, 연결 후에는 입력에 응답하지 않는 빈 프롬프트가 나타나서 stdin/stdout이 올바르게 연결되지 않은 것 같습니다.
관련 질문:
SSH 구성 항목과 함께 동적으로 얻은 호스트 이름 사용
답변1
명령을 전달하지 않기 때문에 ssh
표준 입력에서 명령을 기대하는 쉘을 실행합니다. 그러나 셸 명령을 전달하는 것이 아니라 SSH 트래픽을 전달하는 것입니다. 웃음이 계속됩니다.
터널은 입니다 ProxyCommand
. 이 예에서는 SSH 연결 내에서 SSH 연결을 터널링합니다. 터널을 원하지 않는다면 ProxyCommand
이것은 당신이 찾고 있는 것이 아닙니다.
OpenSSH 6.4부터 키워드가 Match
포함된 지시문을 사용하여 exec
런타임 지침에 따라 블록을 조건부로 포함할 수 있습니다. 일반적인 사용 사례는 노트북의 위치에 따라 실제 호스트 이름이나 프록시 명령이 다른 경우입니다. 각 Match
블록은 Host
블록을 대체하며 명령의 출력을 사용하여 호스트 이름을 확인할 수 없으며 상태 0으로 종료되었다는 사실만 사용할 수 있습니다.
# Connection inside ACME network
Match host foo exec on-acme-network
HostName foo.acme.local
# Connection from outside ACME
Host foo
HostName foo.example.com
대리인은 또 다른 옵션입니다. 연결할 때 결정된 호스트 이름과 포트에 대한 연결을 설정하려면 다음을 사용할 수 있습니다.인터넷 고양이TCP 연결을 설정합니다.
Host foo
ProxyCommand nc $(determine-target-host-name) 22
완전히 동적인 파이프를 원한다면 .ssh/config
명명된 파이프로 만들고 프로세스가 항상 파이프에 쓰도록 할 수 있습니다. 아니면 씌우거나스크립트 파일 시스템.