Я подключаюсь к экземпляру Amazon Web Service (AWS) EC2 в частной подсети виртуального частного сервера через экземпляр NAT и получаю следующую ошибку:
Отказано в доступе (открытый ключ)
Это произошло после того, как я подключился к NAT и попытался подключиться по SSH к экземпляру EC2 частной подсети.
Процедура:
Определите хост
~/.ssh/config
следующим образом:Host my_aws_nat Hostname xx.xx.xx.xx User ec2-user IdentityFile /location/of/my/aws/key_pair.pem ForwardAgent yes
SSH к экземпляру NAT через
ssh my_aws_nat
(что успешно)SSH-подключение к экземпляру в частной подсети — вот тогда я и получаю ошибку
ssh [email protected]
Я могу пинговать свой частный экземпляр из моего NAT с помощью ping 10.0.X.X
. Так что я почти уверен, что это не проблема групп безопасности. Похоже, что это проблема переадресации агента.
В настоящее время экземпляр, к которому я подключаюсь, использует ту же пару ключей, что и экземпляр NAT (в режиме обучения).
Другой способ, который я попробовал, — это подключиться к NAT с помощью:
ssh -A [email protected] -i key_pair.pem
Который снова правильно подключается к NAT, но выдает ту же ошибку при подключении к частному экземпляру.
Обязательно ли использовать ssh-agent
Mac OS X?
Или указание не должно ForwardAgent yes
делать /.ssh/config
то же самое?
решение1
Согласноэтотответ иэто руководство
Мне нужно было добавить key_pair.pem
в OSX ssh-агент следующим образом:
ssh-add -K /path/to/key_pair.pem
(в моем случае пароль не запрашивался)
После этого все заработало нормально при использовании обеих описанных выше методик.
Итак, отвечая на вопрос:
В: Необходимо ли использовать ssh-agent в Mac OS X для входа в частный экземпляр подсети через NAT/хост-бастион?
А: ДА
решение2
Мне помогло удаление открытого ключа бастиона (экземпляра NAT) из ~/.ssh/known_hosts
. Если ключ удаленного хоста бастиона изменился (что может случаться довольно часто, если вы выделяете EIP новым экземплярам) и, кроме того, установили StrictHostKeyChecking no
в своем ssh_config, AgentForwarding будет отключен на хосте бастиона. Вы также найдете предупреждение, говорящее об этом, если вы войдете на хост бастиона. Что касается меня, я просто не читал его -.-
Итак, удалите ключ и подключитесь снова, текущий ключ будет добавлен в файл known_hosts, и вы сможете подключиться к экземпляру в частной подсети.