ssh
세 개의 서버 A, B, C. A에서 B로, C에서 B로 비밀번호(키)가 없는 경우 중간 서버 B를 통해 A에서 C로 연결하는 방법은 무엇입니까? 인터뷰 중에 이런 질문을 접했습니다. 이 작업을 수행하는 방법을 아는 사람이 있나요?
답변1
귀하는 서버 A에 있습니다:
ssh user@serverB ssh user@serverC
또는 프록시 명령을 사용할 수 있습니다(자세한 내용은 여기를 참조하세요).프록시 및 점프 호스트) 다음과 같습니다.
다음 데이터를 사용하여 ~/.ssh
아래 구성 파일을 만듭니다 .server A
Host serverC
HostName serverC
User user
ProxyCommand ssh -l user serverB -W %h:%p
그런 다음 사용자가 ssh serverC
via를 통해 도달하면 됩니다.serverA
serverB
답변2
원래 질문은 별로 의미가 없었습니다. 그러나 나는 그들이 개인 네트워크의 서버 A와 C에게 (서로를 "볼" 수 없도록) 요청하고 B는 볼 수 있기를 원한다고 생각합니다. 이 경우 대답은 다음과 같습니다.원격 포트 포워딩. 예를 들어:
C에서 B->C로 터널을 만듭니다.
C$ ssh -R 2222:localhost:22 B
그런 다음 다음과 같이 A에서 C로 연결합니다.
A$ ssh A ssh -p 2222 localhost
아니면 좀 더 우아한 방식으로 사용하세요 ssh_config
. 공개 키 인증이 설정되지 않은 경우 서버 C(B의 localhost:2222)에 연결하려면 비밀번호를 입력해야 하지만 문제가 되지 않습니다.
답변3
@coffeMug 첫 번째 솔루션을 시도했는데 B->C의 비밀번호가 더 적은 경우에만 작동하지 않습니까? 내 예에서는 A->B 및 C->B에 비밀번호가 없습니다.
but not B-> C.
아마도, 아마도 C는 A를 허용하지만 A와 직접 통신할 수는 없고 네트워크 통신을 위해 중간 서버 B만 필요한 구성을 가지고 있을 것입니다. 이것이 사실이라면. 서버 B의 iptables는 nat 테이블을 사용하여 몇 가지 작업을 수행할 수 있습니다.
죄송합니다. 도움이 되려고 노력 중입니다... 그러니 시도해 보세요. 다른 모든 경우에는 비밀번호를 묻는 것이 유일한 가능성입니다. ssh를 사용하려면 비밀번호 없이 B->C가 필요하기 때문입니다.