
Я создал два экземпляра EC2 на AWS. Я создал пару ключей для каждого из них. Я загрузил закрытые ключи .pem и преобразовал их в .ppk
формат. Я могу подключиться к каждому из моих экземпляров ec2 с помощью PuTTY и их закрытого ключа .ppk. Но как мне подключиться по SSH с одного из моих экземпляров ec2 к другому? Я могу пинговать публичный DNS любого из них с другого. Но если я попробую подключиться по ssh с одного на другой, я получаю:
В доступе отказано (открытый ключ).
решение1
Способ 1 — использовать те же ключи на серверах:
Конвертировать ключи в формат opensshи загрузите приватные ключи на серверы. Когда вы подключаетесь по ssh к хосту назначения, укажите файл приватного ключа:
ssh -i mykey.pem private.ip.of.other.server
Метод 2 — Создание новых ключей
На каждом сервере запустите:
ssh-keygen
Нажмите Enter Enter Enter. У вас будет два файла:
.ssh/id_rsa
.ssh/id_rsa.pub
НаСервер А, cat и скопируйте в буфер обмена открытый ключ:
cat ~/.ssh/id_rsa.pub
[select and copy to your clipboard]
ssh вСервер Би добавьте его содержимое в файл author_keys:
cat >> ~/.ssh/authorized_keys
[paste your clipboard contents]
[ctrl+d to exit]
Теперь ssh с сервера A:
ssh -i ~/.ssh/id_rsa private.ip.of.other.server
решение2
Есть третье и ИМХО лучшее решение так называемоепереадресация агента ssh:
- на локальной машине настройте ~/.ssh/config, добавив следующий раздел:
Host <ip-or-name-of-A-server> ForwardAgent yes
- Я предполагаю, что на серверах A и B у вас есть локальный ~/.ssh/id_rsa.pub, добавленный в ~/.ssh/authorized_keys сервера
При работе на сервере А ваши ключи могут быть использованы в дальнейшем SSH-соединении, например:
- подключение к другому серверу с помощью ssh-клиента - в данном случае к серверу B,
- scp (защищенная копия),
- git - вы можете выполнять pull/push, используя свою локальную идентификацию, в ваши удаленные репозитории git
- и т. д.
Чтобы проверить, работает ли это:
- подключиться к серверу А
- проверьте, есть ли сокетное соединение для обмена ключами, определив переменную окружения SSH_AUTH_SOCK:
set|grep SSH_AUTH_ # output should be something like this: SSH_AUTH_SOCK=/tmp/ssh-sEHiRF4hls/agent.12042
Примечания:
- вам необходимо запустить агент ssh - linux:
ps -e | grep [s]sh-agent
, для windows проверьте утилиты putty pagent и plink - ссылка:https://help.github.com/articles/using-ssh-agent-forwarding
- устранение неполадок ssh:
https://confluence.atlassian.com/display/BITBUCKET/Troubleshoot+SSH+Проблемы
решение3
Новое решение проблемы от AWS.
Вот запись в блоге на эту тему:
Пожалуйста, обрати внимание:
Публичные ключи SSH доступны только для одноразового использования в течение 60 секунд в метаданных экземпляра. Для успешного подключения к экземпляру необходимо подключиться с помощью SSH в течение этого временного окна. Поскольку срок действия ключей истекает, нет необходимости отслеживать или управлять этими ключами напрямую, как вы делали это ранее.