런타임 시 SSH 연결 대상 결정

런타임 시 SSH 연결 대상 결정

연결할 주소를 생성하는 함수 호출을 수행하여 SSH 연결의 대상 주소를 확인하고 싶습니다. ProxyCommand온라인에서 찾을 수 있는 모든 예제는 이 -W플래그를 사용하여 두 번째 시스템으로 이동합니다. 두 번째 컴퓨터에서 시도했는데 localhost훌륭하게 작동했지만 SSH 인증이 두 번 필요했는데 마음에 들지 않았습니다.

두 번째 홉으로 전달하지 않고 내부 통화를 시도하고 있습니다 ssh. ProxyCommand이제 내 .ssh/config파일에는 다음이 있습니다.

Host test
    ProxyCommand ssh user@address

이렇게 하면 ssh test연결이 잘 되는 것 같은데, 연결 후에는 입력에 응답하지 않는 빈 프롬프트가 나타나서 stdin/stdout이 올바르게 연결되지 않은 것 같습니다.

관련 질문:

SSH 구성 항목과 함께 동적으로 얻은 호스트 이름 사용

SSH 구성 파일의 실행 가능한 스크립트에서 호스트 이름을 얻는 방법은 무엇입니까?

~/.ssh/config에서 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명명된 파이프로 만들고 프로세스가 항상 파이프에 쓰도록 할 수 있습니다. 아니면 씌우거나스크립트 파일 시스템.

관련 정보