Как подключиться по ssh к серверу через бастион(прокси) с ключом из бастиона(прокси), а не из источника

Как подключиться по ssh к серверу через бастион(прокси) с ключом из бастиона(прокси), а не из источника

Итак, по сути, я пытаюсь сделать следующее:

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или ProxyJumpto Cбудет «просто работать»:

Host C
        User user
        ProxyJump proxyuser@B

$ ssh C

Несмотря на небольшое неудобство в виде дополнительной одноразовой команды, на мой взгляд, вы можете сохранить свою конфигурацию вполне разумной.

Вы можете задать себе вопрос, действительно ли хранение ключа на бастионе обеспечивает вам дополнительную безопасность, если он в любом случае будет кэшироваться на вашей локальной машине. Конечно, есть небольшое преимуществонетключ хранится на диске, но если ваш локальный компьютер взломан, то особой разницы между чтением файла или взаимодействием с ssh-агентом, загруженным ключами, не будет.

решение2

Кажется, вы хотите, чтобы ваша конфигурация позволила test-vm искать ключ в bastion. Поэтому я предлагаю:

  1. Скопируйте файл ключа в папку .ssh bob2 в bastion.
  2. добавлять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: и т. д.

Связанный контент