Копировать 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;

неправильно по нескольким причинам.

  1. Вы не указываете конкретного пользователя для входа в систему, если имя пользователя вашего локального хоста не совпадает с вашим удаленным компьютером (для AWS пользователь может бытьec2-user,centos,ubuntuи т.д.
  2. Даже если бы имена пользователей совпадали правильно, поскольку 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
Другие вопросы по тегам