Итак, по сути, я пытаюсь сделать следующее:
ssh [email protected] -t ssh bob2@test-vm
Вышеприведенный код отлично работает, если я просто вставляю его в терминал, однако у меня возникли трудности с попыткой повторить его через файл конфигурации .ssh.
Вот что у меня внутри конфигурационного файла:
Host bastion
HostName 35.192.152.35
User bob2
Host test-vm
User bob2
FOrwardAgent yes
ProxyCommand ssh bastion nc %h %p 2> /dev/null
Однако появляется ошибка «отказано в доступе», недействительный файл открытого ключа? Я пришел к выводу из этого поста: https://unix.stackexchange.com/questions/124078/how-to-ssh-to-a-server-using-another-server-with-key-from-the-second-server
Каким-то образом это сработало у парня, но, похоже, не работает у меня. Я также пробовал разрешить пересылку агента и пересылку TCP в конфигурации sshd_chroot на всех сторонах (origin, bastion и server), но это не помогло.
если я принудительно укажу пути идентификации:
Host bastion
HostName 35.192.152.35
User bob2
IdentityFile /Users/bob/.ssh/id_rsa
Host test-vm
User bob2
FOrwardAgent yes
ProxyCommand ssh bastion nc %h %p 2> /dev/null
IdentityFile /home/bob2/.ssh/id_ed25519
Затем появляется та же ошибка, в дополнение к сообщению о том, что не удалось найти каталог "/home/bob2/.ssh/id_ed25519"
У кого-нибудь есть идеи?
решение1
Как только вы поймете, что бастионы предназначены для обхода сетевых брандмауэров, а не для хранения ключей, вы сможете превратить это в решение из двух команд с минимальной конфигурацией.
На локальной машине A убедитесь, что у вас запущен ssh-agent.
Выполните однократную команду для B, где B имеет следующую конфигурацию:
Host B
ForwardAgent yes
User proxyuser
И выполните следующую команду:
$ ssh B ssh-add # and possibly a reference to a non-standard key
На этом этапе ваш локальный ssh-агент будет иметь удаленный ключ в своем кэше.
После этого простое -J
или ProxyJump
to C
будет «просто работать»:
Host C
User user
ProxyJump proxyuser@B
$ ssh C
Несмотря на небольшое неудобство в виде дополнительной одноразовой команды, на мой взгляд, вы можете сохранить свою конфигурацию вполне разумной.
Вы можете задать себе вопрос, действительно ли хранение ключа на бастионе обеспечивает вам дополнительную безопасность, если он в любом случае будет кэшироваться на вашей локальной машине. Конечно, есть небольшое преимуществонетключ хранится на диске, но если ваш локальный компьютер взломан, то особой разницы между чтением файла или взаимодействием с ssh-агентом, загруженным ключами, не будет.
решение2
Кажется, вы хотите, чтобы ваша конфигурация позволила test-vm искать ключ в bastion. Поэтому я предлагаю:
- Скопируйте файл ключа в папку .ssh bob2 в bastion.
- добавлятьProxyCommandс ssh-add в вашей конфигурации.
решение3
Ниже приведено описание того, что работает у меня... Почти то же самое, что и у вас, за исключением того, что я указываю IP-адрес конечного пункта назначения (возможно, это не имеет значения в вашем случае) иМНЕ ПРИШЛОСЬ КОПИРОВАТЬключ от бастиона к моему локальному хосту, так как мой ssh_config находит файлы ключей здесь, а не на бастионе посередине:
==== added to .ssh/config ====
Host mybastion
HostName 133.35.41.9
User bastuser
IdentityFile /Users/bchapman/.ssh/bast_priv.key
Host mytarget
HostName 109.0.1.38
ProxyCommand ssh -q -W %h:%p mybastion
User targuser
IdentityFile /Users/bchapman/.ssh/targ_priv.key
==============
После этого я могу нормально использовать ssh mytarget, scp localfile mytarget: и т. д.