Я знаю, что могу сделать следующее, чтобы скопировать ключ SSH
ssh-copy-id [email protected]
но когда я развертываю новый сервер, мне необходимо авторизовать на нем несколько ключей SSH.Можно ли как-то облегчить жизнь при авторизации нескольких ключей SSH?
решение1
Читая man-страницу ssh-copy-id
, кажется, что он должен копировать все ключи из ssh-agent, которые не принимаются для входа. Так что загрузите все пары ключей в ssh-agent с помощью ssh-add
и используйте ssh-copy-id
после этого.
Если это не сработает, вы можете попробовать указать ключи для ssh-copy-id
:
for i in ~/.ssh/*.pub; do
ssh-copy-id -i $i user@host
done
Если это все еще не работает, возможно, стоит взглянуть на что-то вроде ansible:
# sshkeys.yml
---
- hosts: all
remote_user: foo
tasks:
- authorized_key:
user: foo
key: '{{lookup("file", item)}}'
with_items:
- id_rsa.pub
- id_rsa_alternate.pub
Используйте как:
ansible-playbook -i remote.host.com, -k sshkeys.yml
Обязательно прочтите больше об ansible, если вы решите пойти по этому пути.
решение2
ВСТУПЛЕНИЕ
Этот способ намного лучше ssh copy id, так как вы можете копировать ключи любому пользователю для ssh-сервера с любым портом, а не только 22. О, и вы можете иметь несколько ключей в вашем authorized_keys.org, которые будут добавлены в файл authorized_keys на сервере. Убедитесь, что authorized_keys.org имеет один открытый ключ ssh на строку.
Есть много способов, которыми вы можете построить эти строки по своему вкусу. Я предлагаю никогда не забывать этот cat | ssh cat
метод или похожий echo | ssh ssh cat
метод, так как они идеально подходят для записи на удаленных серверах. cat SOMETHING | ssh SERVER "cat - > REMOTEFILE"
или вы можете использовать echo like, так что echo "SOMETHING" | ssh SERVER "cat - > REMOTEFILE"
это идеальные методы для чтения чего-либо локально и затем записи или добавления на другом сервере. Запишите это так cat - > REMOTEFILE
или добавьте это такcat - >> REMOTEFILE
ОТВЕТЫ
cat authorized_keys.org | ssh -p 22 [email protected] "cat - >> /root/.ssh/authorized_keys"
или
cat authorized_keys.org | ssh -p 22 [email protected] "cat - >> ~/.ssh/authorized_keys"
Также, если у вас есть ключ ssh (один ключ ssh):
cat id_rsa.pub | ssh -p 22 [email protected] "cat - >> /root/.ssh/authorized_keys"
или
cat id_rsa.pub | ssh -p 22 [email protected] "cat - >> ~/.ssh/authorized_keys"
Этого должно быть достаточно, чтобы все понять.
БОЛЬШЕ ИНФОРМАЦИИ
ПРИМЕЧАНИЕ: Прочитайте мои комментарии ниже о том, что вы не ограничены использованием "root". Здесь вы можете увидеть, что все его части можно изменять:
[input of ssh keys or keys (as long as new line sepearted)] | ssh -p PORT USER@SERVER "cat - >> AUTHORIZEDKEY"
БОНУС:Предположим, что сервер SSH не разрешает вход по паролю и разрешает только ключи SSH, но вы хотите сообщить ему о большем количестве ключей.
[input of ssh keys or keys (as long as new line sepearted)] | ssh -i PRIVATE -p PORT USER@SERVER "cat - >> AUTHORIZEDKEY"
- [ввод ключей ssh или ключей (с разделением новой строкой)]: это может быть часть файла с одним или несколькими открытыми ключами, если они разделены новой строкой, или эхо полного открытого ключа (или нескольких открытых ключей, опять же с разделением новой строкой — вы можете использовать «echo -e 'line1\nline2'» для разделения новых строк с помощью эха.)
- ЧАСТНЫЙ: если ваш сервер SSH допускает только определенный ключ, поскольку на нем настроена только аутентификация по ключу SSH и у него есть ваш открытый ключ, то укажите закрытый ключ этого открытого ключа.
- USER: пользователь, к которому вы хотите подключиться и изменить его ключ. Если вы подключаетесь как root (пример:[email protected]), вы можете добавить к любым ключам "cat - >> /home/anyuser/.ssh/authorized_keys" или вы можете добавить к корневым ключам "cat - >> /root/.ssh/authorized_keys". Однако, если вы подключаетесь как пользователь user1, то вы можете изменить только ключи пользователя user1 "cat - >> /home/user1/.ssh/authorized_keys" или, проще говоря, "cat - >> ~/.ssh/authorized_keys" (последний вариант работает для любого пользователя).
- СЕРВЕР: сервер, к которому вы хотите подключиться. В данном случае это server.com
- PORT: принятый порт сервера SSH на сервере. Обычно это порт 22. Обратите внимание, что если это порт 22, вы можете пропустить "-p 22", так как это порт по умолчанию.
- AUTHORIZEDKEY: это местоположение authorized_keys. Я рассмотрел это в пункте USER. Это будет либо "/root/.ssh/authorized_keys", либо "/home/user1/.ssh/authorized_keys", либо "~/.ssh/authorized_keys"