Копировать SSH-ключи между хостами
Я выступаю:
# copy public key to other hosts
for host in ec2-master.eu-west-1.compute.amazonaws.com \
ec2xxx.compute.amazonaws.com \
ec2xxx.compute.amazonaws.com; \
do ssh-copy-id -i ~/.ssh/id_rsa.pub $host; \
done
Поэтому я пытаюсь скопировать ключ, сгенерированный мной на ec2-master.eu-west-1.compute.amazonaws.com, на другие серверы. Но я все еще получаю
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
The authenticity of host 'ec2xxx.eu-west-1.compute.amazonaws.com (10.0.xx.xx)' can't be established.
ECDSA key fingerprint is 3a:63xx:a6:19:xx:23:d1:xx:06:22:xx:a0:b9:8c:xx:cf.
Are you sure you want to continue connecting (yes/no)?
Итак, я получил отказано в разрешении. Но я не знаю почему. Что я делаю неправильно?
3 ответа
Попробуйте изменить ssh-copy-id
команда для:
ssh-copy-id -i ~/.ssh/id_rsa.pub ec2-user@$host
(при условии, что вы используете Amazon Linux - используйте ubuntu
как пользователь, если вы используете Ubuntu)
Обновить:
Я думаю, что проблема может быть в том, что вы пытаетесь скопировать новый ключ на хост, который принимает вход только с использованием существующего ключа (пароли не допускаются).
Я не мог заставить это работать ssh-copy-id
, но вы можете сделать это с помощью стандартной команды ssh:
cat ~/.ssh/id_rsa.pub | ssh -i AWS_key.pem centos@$host "cat - >> ~/.ssh/authorized_keys"
куда AWS_key.pem
является частной частью пары ключей, которую AWS прикрепил к вашему экземпляру при запуске.
SSH пытается сообщить вам, что аутентификация на ваших хостах не удалась , и какие методы аутентификации были испробованы.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
Это то, что(publickey,gssapi-keyex,gssapi-with-mic)
часть вывода журнала говорит вам.
Он сообщает вам, что пытался пройти аутентификацию с использованием методов аутентификации publickey , gssapi-keyex и gssapi-with-mic .
Обычно вы или AWS предоставляете пару ключей ssh для предварительной настройки.
Конфигурация sshd также настроена на аутентификацию с использованием пары ключей (открытый + закрытый ключ = шифрование с открытым ключом, поэтому открытый ключ упоминается в журнале ssh).
Поэтому ваша команда
ssh-copy-id -i ~/.ssh/id_rsa.pub $host;
неправильно по нескольким причинам.
- Вы не указываете конкретного пользователя для входа в систему, если имя пользователя вашего локального хоста не совпадает с вашим удаленным компьютером (для AWS пользователь может быть
ec2-user
,centos
,ubuntu
и т.д. - Даже если бы имена пользователей совпадали правильно, поскольку AWS эффективно (я не знаком с GSSAPI) разрешает только аутентификацию пары ключей ssh, вы сможете войти в систему только с закрытым ключом, выбранным или сгенерированным при создании экземпляра EC2.
Если на хосте настроен какой-либо альтернативный механизм аутентификации, т.е. user:password
тогда вы сможете запустить модифицированную версию команды.
REMOTE_USER=ec2-user
...
do ssh-copy-id -i ~/.ssh/id_rsa.pub $REMOTE_USER@$host
Тем не менее, вам будет предложено ввести пользователя/пароль каждый раз.
Примечание. Приведенная выше команда предполагает, что вы включили механизм аутентификации пользователя/пароля (может быть временно). Однако только для 3 хостов я мог бы просто вручную установить пару ключей на этом этапе.
Язык из « Копировать ключ на сервер » с sshd.com , по-видимому, подразумевает, что аутентификация на основе пароля изначально включена на хостах.
«После создания ключа SSH можно использовать команду ssh-copy-id для его установки в качестве авторизованного ключа на сервере. После авторизации ключа для SSH он предоставляет доступ к серверу без пароля».
Я использую этот скрипт, и он работает для меня: Можете ли вы попробовать это
for host in ${hosts[*]}
do
echo $host
ssh-keyscan $host | tee -a ~/.ssh/known_hosts
sshpass -p 'mypass' ssh-copy-id myuser@$host
done