Хосты перехода: многопереходный SSH
Создайте лабораторию с тремя виртуальными машинами и подключитесь к цели через два хоста перехода SSH с вашего Mac.
Перед выполнением
Используйте частную тестовую среду. Замените примеры IP-адресов фактическими адресами виртуальных машин. Проверьте каждый ключ хоста SSH с помощью Multipass, прежде чем доверять ему. ProxyJump проверяет подлинность каждого перехода с вашего Mac; для этого не требуется закрытый ключ на переходном хосте. Хосты перехода должны разрешать пересылку TCP, и каждый переход должен иметь возможность связаться со следующим. Перед изменением правил брандмауэра сделайте сеанс восстановления доступным.
Примеры
Установите Multipass, создайте три виртуальные машины Ubuntu и запишите их фактические IP-адреса.
brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass listСоздайте специальный ключ на Mac. Выберите парольную фразу и не перезаписывайте существующий ключ.
ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519Скопируйте только открытый ключ на каждую виртуальную машину. Эти команды создают временный файл securepipes-lab.pub в каждом домашнем каталоге Ubuntu; перед их запуском убедитесь, что он еще не существует.
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_keysПолучите отпечаток ключа хоста каждого сервера с помощью Multipass. Сравните его с отпечатком пальца, показанным 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Добавьте эти записи в ~/.ssh/config на вашем Mac, используя фактические IP-адреса виртуальной машины. Сохранить существующие записи; поместите их перед любыми соответствующими значениями хоста * по умолчанию. Измените 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Дополнительный контролируемый лабораторный тест: только если цель может отличить исходный IP-адрес Mac от jump2, а существующая политика UFW разрешает SSH, разрешите jump2, прежде чем запрещать фактический исходный IP-адрес Mac. Замените оба заполнителя. Не включайте и не изменяйте рабочий брандмауэр на основе этого примера; сохраните доступ к консоли и удалите правила после тестирования.
# 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После дополнительных правил брандмауэра прямой SSH должен завершиться неудачно, в то время как ProxyJump завершится успешно. Удалите два правила, используя одни и те же фактические 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Официальные источники
Проверено 27 октября 2026 г.