
다른 서버(B)를 통해서만 액세스할 수 있는 원격 서버(A)에 액세스하기 위해 SSH 터널을 생성하려고 합니다. 내 로컬 컴퓨터(L)에 릴레이 서버(B)에 연결하기 위한 키가 있고 릴레이 서버(B)에 대상 서버(A)에 연결하기 위한 또 다른 키가 있습니다.
[릴레이 서버(B)에 대한 키가 있는 로컬 머신(L)] --> [대상 서버(A)에 대한 키가 있는 릴레이 서버(B)] --> [대상 서버(A)]
내 로컬 컴퓨터(L)에 다음과 같은 ~/.ssh/config 파일이 있습니다.
Host relay.server(B)
Hostname relay.server
Port 22
User me
IdentityFile ~/.ssh/id_rsa
Host destination.server(A)
Hostname destination.server
Port 1122
User me
IdentityFile ~/.ssh/id_rsa
그리고 다음과 같이 터널을 작동시킬 수 있습니다.
ssh -N -L 1122:SERVER_PRIVATE_IP:22 relay.server(B)
내 로컬 컴퓨터(L)에서 다음 명령을 실행합니다 . 첫 번째 키를 잠금 해제하기 위한 비밀번호를 묻는 메시지가 표시되고 중단된 것처럼 보이지만 프롬프트를 반환하지 않습니다. -f
옵션을 사용하거나 기호로 끝나는 경우 &
비밀번호를 입력할 수 없습니다. 그러나 ^C
비밀번호를 입력한 후 이 명령을 입력 하면 ssh destination.server(A)
대상 서버(A)에 연결된 후 두 번째 키의 잠금을 해제하기 위해 비밀번호를 제공하라는 메시지가 표시됩니다.
내 로컬 컴퓨터(L)에서 대상 서버(A)에 연결할 수 있게 하고 각 키를 잠금 해제하는 데 필요한 비밀번호를 제공하라는 메시지를 표시하는 단일 명령을 찾고 있습니다. 또는 릴레이 서버(B)를 통해 내 로컬 컴퓨터(L)에서 대상 서버(A)에 직접 연결할 수 있도록 항목을 구성하는 대체 방법에 대한 제안입니다.
답변1
짧은 대답은 당신이 필요하다는 것입니다
ProxyCommand
nc
연결하는 데 사용ForwardAgent
열쇠를 전달하기 위해- 공개 키가
.ssh/authorized_keys
모든 서버 의 일부인지 확인하세요.
Host relay Hostname relay.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ForwardAgent yes Host destination Hostname destination.server.fqdn.or.IP User me IdentityFile ~/.ssh/id_rsa ProxyCommand ssh -q relay "nc %h %p" ForwardAgent yes
더 긴 부분.
ssh config의 옵션 은 해당 엔클로징이 사용될 ProxyCommand
때마다 명령을 실행합니다 . Host
이는 일반적으로 nc
nmap.org라고도 알려진 nmap.org에서 사용되며 ncat
많은 옵션이 있습니다.
위의 Host destination
ssh 구성 항목 에서는 ssh가 조용히 릴레이하고 실행하도록 ProxyCommand
설정되었습니다 .ssh -q relay "nc %h %p"
nc destination.server.fqdn.or.IP 22
nc
들어오는 SSH와 대상을 연결합니다.
ForwardAgent yes
ssh-agent에 키를 추가하도록 ssh에 지시합니다 . SSH 에이전트는 키를 추적하고 필요에 따라 올바른 키를 호스트에 자동으로 전달하는 데 사용됩니다. 이는 ForwardAgent yes
에이전트에게 릴레이의 다른 에이전트에게 키를 전달한 다음 다시 대상으로 전달하도록 지시합니다.
이제 이 모든 것이 작동하려면 통과하는 각 서버와 궁극적으로 대상의 .ssh/authorized_keys
파일에 개인 키(id_rsa)와 연결된 공개 키가 있어야 합니다. 개인 키 id_rsa를 생성할 때 공개 키 id_rsa.pub도 생성되어야 합니다.
공개 키가 없는 경우 언제든지 ssh-keygen -y -f ~/.ssh/id_rsa
쉽게 복사/붙여넣기를 위해 개인 키에서 가져올 수 있습니다. 공개 키에는 공백으로 구분된 2~3개의 필드가 있지만하나선.
따라서 공개 키를 ssh relay
편집 ~/.ssh/authorized_keys
(존재하지 않을 수 있으므로 mkdir -p ~/.ssh
필요할 수 있음)하고 새 줄(또는 없으면 첫 번째 줄)에 붙여넣습니다.
릴레이 서버에 있는 동안 nc
/bin 또는 /usr/bin에 존재하는지 확인합니다. 그렇지 않은 경우 패키지 관리자(yum 또는 apt-get)를 사용하여 설치해야 합니다.
릴레이 서버에서 ssh destination
동일한 업데이트를 수행합니다 ~/.ssh/authorized_keys
.
exit
로컬 컴퓨터로 끝까지 이동하면 다음을 수행할 수 있습니다.ssh destination
답변2
최신 OpenSSH 버전 ProxyJump
에서는 다음 을 허용합니다 .ssh/config
.
Host relay
Hostname relay.server.fqdn.or.IP
User me
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Host destination
Hostname destination.server.fqdn.or.IP
ProxyJump relay
User me
IdentityFile ~/.ssh/id_rsa