점프 호스트: 멀티홉 SSH
3개의 VM으로 구성된 랩을 구축하고 Mac에서 두 개의 SSH 점프 호스트를 통해 대상에 연결하세요.
실행 전 확인
비공개 테스트 환경을 사용하세요. 예시 IP 주소를 실제 VM 주소로 바꿉니다. 각 SSH 호스트 키를 신뢰하기 전에 Multipass를 통해 확인하세요. ProxyJump는 Mac의 각 홉을 인증합니다. 점프 호스트에는 개인 키가 필요하지 않습니다. 점프 호스트는 TCP 전달을 허용해야 하며 각 홉은 다음 홉에 도달할 수 있어야 합니다. 방화벽 규칙을 변경하기 전에 복구 세션을 사용할 수 있도록 유지하십시오.
사용 예제
Multipass를 설치하고 세 개의 Ubuntu VM을 생성하고 실제 IP 주소를 기록합니다.
brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass listMac에서 전용 키를 만듭니다. 암호를 선택하고 기존 키를 덮어쓰지 마십시오.
ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519공개 키만 각 VM에 복사합니다. 이 명령은 각 Ubuntu 홈 디렉터리에 임시 파일 securepipes-lab.pub를 생성합니다. 실행하기 전에 이미 존재하지 않는지 확인하십시오.
for vm in jump1 jump2 target; do
multipass exec "$vm" -- test ! -e /home/ubuntu/securepipes-lab.pub || break
multipass transfer ~/.ssh/securepipes_lab_ed25519.pub "${vm}:/home/ubuntu/securepipes-lab.pub" || break
multipass exec "$vm" -- sh -c 'umask 077; mkdir -p "$HOME/.ssh"; chmod 700 "$HOME/.ssh"; cat "$HOME/securepipes-lab.pub" >> "$HOME/.ssh/authorized_keys" && chmod 600 "$HOME/.ssh/authorized_keys" && rm "$HOME/securepipes-lab.pub"' || break
done공개 키 지문을 설치된 키와 비교하세요. Authorized_keys 파일에는 다른 키도 포함될 수 있습니다.
ssh-keygen -lf ~/.ssh/securepipes_lab_ed25519.pub
multipass exec jump1 -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys
multipass exec jump2 -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys
multipass exec target -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keysMultipass를 통해 각 서버 호스트 키 지문을 얻습니다. 새 호스트 키를 수락하기 전에 SSH에 표시된 지문과 비교하세요.
multipass exec jump1 -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
multipass exec jump2 -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
multipass exec target -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub실제 VM IP를 사용하여 Mac의 ~/.ssh/config에 이러한 항목을 추가합니다. 기존 항목을 보존합니다. 일치하는 Host * 기본값 앞에 이를 배치합니다. 다른 키 경로를 선택한 경우 IdentityFile을 조정하세요.
Host jump1
HostName 192.168.252.2
User ubuntu
IdentityFile ~/.ssh/securepipes_lab_ed25519
IdentitiesOnly yes
Host jump2
HostName 192.168.252.3
User ubuntu
IdentityFile ~/.ssh/securepipes_lab_ed25519
IdentitiesOnly yes
Host target
HostName 192.168.252.4
User ubuntu
IdentityFile ~/.ssh/securepipes_lab_ed25519
IdentitiesOnly yes먼저 직접 액세스를 테스트한 다음 두 점프 호스트를 모두 통해 연결합니다. 지문을 확인한 후에만 호스트 키를 수락하세요. Secure Pipes에서 대상 연결을 위해 동일한 두 개의 점프 호스트를 구성합니다.
ssh jump1
ssh jump2
ssh target
ssh -J jump1,jump2 target선택적 통제 실험실 테스트: 대상이 Mac 소스 IP를 점프2와 구별할 수 있고 기존 UFW 정책이 SSH를 허용하는 경우에만 실제 Mac 소스 IP를 거부하기 전에 점프2를 허용하십시오. 두 자리 표시자를 모두 교체합니다. 이 예를 기반으로 프로덕션 방화벽을 활성화하거나 변경하지 마십시오. 콘솔 액세스를 유지하고 테스트 후 규칙을 제거하십시오.
# On the target VM, replace the placeholders first:
sudo ufw status numbered
sudo ufw insert 1 allow from <JUMP2_IP> to any port 22 proto tcp
sudo ufw insert 2 deny from <MAC_SOURCE_IP> to any port 22 proto tcp선택적 방화벽 규칙 이후에는 ProxyJump가 성공하는 동안 직접 SSH가 실패해야 합니다. 동일한 실제 IP 주소를 사용하여 두 규칙을 제거한 후 액세스를 다시 확인하세요.
ssh target
ssh -J jump1,jump2 target
# On target, remove the lab rules:
sudo ufw delete deny from <MAC_SOURCE_IP> to any port 22 proto tcp
sudo ufw delete allow from <JUMP2_IP> to any port 22 proto tcp공식 참고 자료
검토일: 2026년 10월 27일