프록시 점프를 통해 원격 서버에 연결해야 합니다. 이를 위해 -J 플래그를 사용하려고 합니다. 구문이 다음과 같다는 것을 이해합니다.
ssh -J A B
하지만 두 연결 모두에 키 파일을 사용해야 합니다. 그래서 나는 이것을 시도했습니다 :
ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host
분명히 작동하지 않습니다.
option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
[-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
[user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host
이 경우 SSH 설정을 편집하지 않고 올바른 인라인 구문은 무엇입니까? 이 경우 키가 어느 서버에 저장되어 있는지에는 차이가 없습니다.
답변1
구문이 다음과 같다는 것을 이해합니다.
ssh -J A B
예, 하지만 그게 전부는 아닙니다. -J
는 독립 실행형 플래그가 아닙니다. 단순히 동일한 명령줄에 두 개의 독립적인 연결 옵션 세트를 지정하도록 허용하는 것은 아닙니다.
대신 -J
플래그는 중간 호스트의 이름을 사용합니다.매개변수로, 그러니 -i <keyfile>
늘 함께 가듯, -J <proxy>
남아도 함께 있어야 합니다.
그리고 이 옵션을 사용하더라도 전체 'ssh' 구문은 변경되지 않습니다. 어떤 옵션이 호스트 A에 속하고 어떤 옵션이 호스트 B에 속하는지 그룹화되지 않습니다. 이와 같은 '-i' 옵션이 두 개 있으면 SSH 그냥 시도해 볼게둘 다두 개의 연결을 각각 만들 때 키.
그러나 후자는 문제가 되지 않습니다. 각 서버는 키를 수락하지 않는다는 것을 나타내고 SSH는 다른 서버를 시도하기 때문입니다. 따라서 다음이 작동합니다.
ssh -J user@proxy_host -i /path/proxy.pem -i /path/target.pem user@target_host
└────────────────┘ └────────────────┘ └─────────────────┘
그러나 호스트 중 하나가 여러 키가 시도된다는 사실을 좋아하지 않는 경우 -J를 긴 형식의 ProxyCommand로 변환해야 합니다.
ssh -o ProxyCommand="ssh -i /path/proxy.pem -W %h:%p user@proxy_host" -i /path/target.pem user@target_host