중개 서버를 통해 SSH를 사용하는 방법

중개 서버를 통해 SSH를 사용하는 방법

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 serverCvia를 통해 도달하면 됩니다.serverAserverB

답변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가 필요하기 때문입니다.

관련 정보