
다음과 같은 방법으로 Linux 점프 호스트를 통해 SSH 터널을 설정하고 싶습니다.
호스트 A는 Windows 기반이고 점프 호스트(호스트 B)로 인증할 개인 키가 있습니다. 호스트 B는 Linux 기반이고 DMZ의 호스트로 인증할 개인 키가 있는 다른 사용자가 있습니다. 호스트 C는 Windows 기반이고 SSH(또는 물리적)를 통해서만 호스트 B에서 연결할 수 있습니다. 시도했지만 ssh -v -N user2@HostC -J user1@HostB -L [port]:HostC:[remote_port]
작동하지만 비밀번호만 사용하면 필요한 모든 호스트에 키가 있음에도 불구하고 계속 요청합니다.
누구든지 이 주제에 대해 도움을 줄 수 있나요?
PS 세 호스트 모두에서 동일한 키 쌍을 사용하면 작동하지만 보안상의 이유로 다른 키 쌍을 가진 다른 사용자를 사용하고 싶습니다.
답변1
예비 참고 사항
- 나는 Windows를 사용하지 않지만 그다지 중요하지 않기를 바랍니다.
- 종종 "A", "B", "C"라고 말할 때 실제로는 각각 "A의 사용자", "B의 user1", "C의 user2"를 의미합니다. 예를 들어 "B의 키"는 "B에서 사용할 수 있는 user1의 키"를 의미합니다. 이는 간결함을 위한 것입니다.
분석
이것은어떻게 -J
작동하나요 ?:
-J destination
먼저 설명된 점프 호스트에 SSH 연결을 만든destination
다음 거기에서 최종 대상으로의 TCP 전달을 설정하여 대상 호스트에 연결합니다.
이 뜻 ssh -J user1@B user2@C
은~ 아니다이는 A에서 B로 연결한 다음 B에서 C로 연결하는 것과 동일합니다. 이는 A에서 B로 연결한 다음 A에서 C로 연결하는 것과 같습니다(B를 통해 전달된 패킷 사용). B에서는 SSH 클라이언트가 호출되지 않으므로 B에서 C로 연결하는 데 사용되는 키는 사용되지 않습니다.
해결책
일반적인 문제를 해결하는 가장 우아한 방법은 C가 A의 키를 받아들이도록 하는 것입니다. 당신은 말했다:
세 호스트 모두에서 동일한 키 쌍을 사용하면 작동하지만 보안상의 이유로 다른 키 쌍을 가진 다른 사용자를 사용하고 싶습니다.
다른 쌍을 사용할 수 있습니다. 현재 A에서 B로 연결할 수 있는 키 쌍과 B에서 C로 연결할 수 있는 별도의 쌍이 있다는 것을 알고 있습니다. 후자는 관련이 없습니다. C에서는 A가 인증에 사용하는 모든 키에 권한을 부여합니다. 이전 키(B에서 이미 승인된 키)일 수 있습니다. 하지만 이 연결을 위해 독점적으로 생성된 새 키일 수도 있습니다.
그런 다음 A에서 수행할 때 ssh -J user1@B user2@C
A를 B에 연결할 수 있는 키를 사용해야 합니다.그리고A가 C에 연결할 수 있게 해주는 키입니다. 서로 다른 키인 경우 둘 다 사용해야 합니다. 사용-i
필요하다면 한 번 또는 두 번이라도.
대체 솔루션
A에서 B로 연결한 후 실제로 B에서 C로 연결하면 이미 등록된 키를 사용할 수 있습니다. A에서 C로 로그인하려는 경우 다음과 같습니다.
# from A
ssh -t user1@B 'ssh user2@C'
(적어도 Linux에서는 Windows에서 인용이 어떻게 작동하는지 잘 모르겠습니다).
이 명령은 ssh
B에서 실행되어 C에 연결되므로 B의 키를 사용합니다.
포트 포워딩 정보
귀하의 원래 명령은 -N
및 을 사용했으므로 -L
유일한 목표는 포트를 전달하는 것임을 이해합니다. A-C 연결을 사용하여 포트를 전달했으며 대상도 C였습니다. 따라서 전달된 패킷의 마지막 구간은 C의 SSH 서버에서 C로 이동하는 것이었습니다.아마도B에서 연결할 [remote_port]
수 있습니다. 그렇다면 위의 해결 방법이 필요하지 않습니다. 필요한 것은 다음과 같습니다.
ssh -NL [port]:C:[remote_port] user1@B
이렇게 하면 전달된 패킷의 마지막 구간이 B의 SSH 서버에서 C로 이동하게 됩니다.
마지막 구간이 C에서 C까지여야 하는 경우 조치 과정은 선택한 솔루션에 따라 달라집니다.
C에서 인증된 A 키를 사용하는 솔루션을 사용하면 비밀번호 없이 원래 명령을 사용할 수 있습니다.
B에서 실행되는 솔루션을
ssh
사용하려면 포트를 A에서 B로, B에서 C로 별도로 전달해야 합니다. 다음과 같습니다.ssh -L [port]:localhost:[relay_port] user1@B 'ssh -NL [relay_port]:C:[remote_port] user2@C'