Шаг 1
Убедитесь, что ваш местный агент готов
То, что вы можете использовать ssh на своем бастионном сервере без указания пути к ключу или запроса пароля, не означает, что ваш агент ssh работает и удерживает ваш ключ. Некоторые современные ОС (например, OSX) обрабатывают это для вас.
На вашей локальной машине
$ ssh-add -L
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13== ~/.ssh/mykey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13== ~/.ssh/sharedkey.pem
рисунок 1
Это означает, что ваш агент работает и имеет ваш ключ.
$ ssh-add -L
The agent has no identities.
fig.2
Это означает, что вы не добавили никаких ключей к своему агенту. Исправьте это с помощью:
ssh-add ~/.ssh/mykey.pem ~/.ssh/sharedkey.pem
рис.3
Шаг 2
Убедитесь, что ваш удаленный агент готов
SSH в ваш бастионный сервер и повторите проверку с рис.1 и рис.2. Однако ошибка, которую вы, скорее всего, получите, заключается в следующем:
$ ssh-add -L
Could not open a connection to your authentication agent.
Рис.4
Скорее всего, это означает, что ваш SSH-клиент не передает ваше соединение с агентом аутентификации.
Вы можете принудительно сделать это с помощью флага -A
(если это позволяет конфигурация sshd на сервере, что по умолчанию).
$ ssh -A bastion.ec2
рис.5
Шаг 3
Убедитесь, что вы используете правильные ключи
Если вы добавили ключи к своему агенту, ваш агент переадресовывает, а ваш удаленный агент перечисляет ваши локальные ключи. Есть только две вероятные причины, по которым вы не получаете соединение. Либо вы не используете правильный ключ, либо вы не используете правильное имя пользователя.
Выведите открытый аналог на ваш закрытый ключ:
$ cd
$ cd .ssh
$ ssh-keygen -y -f mykey.pem
ssh-rsa ObahfCbvagGbLbhSbeHfvatEBG13
$ ssh-keygen -y -f sharedkey.pem
ssh-rsa LbhNerWhfgJnnlGbbPyrireEBG13
рис.6
Они должны совпадать с тем, что вы видели от ssh-add -L
до ==
в конце.
Теперь, так или иначе, вам нужно попасть в окно, к которому вы не можете подключиться, и посмотреть содержимое файла $HOME/.ssh/authorized_keys
для пользователя, с которым вы пытаетесь подключиться. Вы должны убедиться, что открытый ключ, который вы выводите с помощью приведенной выше команды, находится в этом файле в отдельной строке. Вы не можете поверить, что sharedkey.pub
который вам отправили кубики Bro 2, является правильным. Проверьте! Это может потребовать, чтобы кто-то, кто может использовать SSH в качестве этого пользователя, мог получить вам файл author_keys или получить root-доступ. Если вы зашли так далеко, и это все еще не работает, вы не можете идти по ярлыкам.
Шаг 4
Делай проще
Надеюсь, что вышеперечисленные шаги помогли вам. Теперь давайте избавимся от этой головной боли, пока вы используете эту рабочую станцию.
Настройте свой локальный ssh-клиент
Host *
# A lot of people put an IdentityFile line in this Host * section.
# Don't do that unless you will use only 1 key everywhere forever.
#IdentityFile id_rsa
Host bastion.ec2
# You want to make sure you always forward your agent to this host.
# But don't forward to untrusted hosts. So don't put it in Host *
ForwardAgent yes
# Go a head and put the IP here in case DNS ever fails you.
# Comment it out if you want. Having it recorded is a good backup.
HostName 172.31.0.1
# You don't want to create a proxy loop later, so be explicit here.
ProxyCommand none
# SSH should try using all keys in your .ssh folder, but if you
# know you want this key, being explicit speeds authentication.
IdentityFile ~/.ssh/mykey.pem
# Connect effortlessly by hostname or IP address
# This assumes that your internal DNS uses the fake TLD ec2
# This assumes that 172.31.0.0 is your C-Class subnet
Host *.ec2 172.31.*
# This command says proxy all ssh connections through bastion as if
# you had done an ssh -A
ProxyCommand ssh -W %h:%p bastion.ec2
ForwardAgent yes
# These next lines are documentation you leave as a love letter to
# your future self when all else fails or you have to help a
# coworker and decide to look at your own config.
# ssh-add ~/.ssh/*.pem
# ssh -At bastion.ecs ssh admin@172.31.18.19
рис.7
Если вы больше ничего не берете из рисунка 7, это должно быть правильное использование ProxyCommand
& ForwardAgent
.
Автоматически заполните ваш .bash_profile
Вам не нужно делать ssh-add
вручную каждый раз, когда вы входите в систему. ~/.bash_profile
- это скрипт, который запускается при каждом входе в систему **. Поставьте линию на рис. 3 там, и вы всегда должны иметь готового агента.
** Не путайте это с .bashrc
который запускается для каждого нового [интерактивного] терминала. Ваш агент продолжает работать, даже если вы закроете все свои терминальные сеансы. Нет необходимости перезагрузить ключи
Альтернатива использованию .bash_profile
Я также создал суть, которая добавляет OSX/ MacOS Launch Agent. Вы можете использовать этот метод для запуска вашего ssh-agent
при загрузке. Это очень легко установить:
curl -sSL https://gist.github.com/RichardBronosky/429a8fff2687a16959294bcee336dd2a/raw/install.sh | bash