Найпростіший спосіб скопіювати ключі ssh на іншу машину?


342

Я лінивий вдома і використовую автентифікацію паролів для своїх домашніх машин. Я готовий перейти до аутентифікації на основі ключів. В Інтернеті є багато варіантів того, як це зробити, включаючи натискання клавіші, натискання клавіші на клавішу, перебирання ключа безпосередньо тощо.

Я шукаю найпростіший і рекомендований спосіб скопіювати ключ, сподіваюся, десь у пакеті Ssh Ubuntu є обгортка зручності?

Я вже знаю, як вимкнути вхід із паролем .


Відповіді:


463

ssh-copy-idКоманда (в OpenSSH-клієнта пакет і встановлюється за умовчанням) робить саме це:

ssh-copy-id user@hostname.example.com

копіює відкритий ключ вашої ідентичності за замовчуванням (використовувати -i identity_fileдля інших ідентифікаторів) на віддалений хост.

Ідентифікатор за замовчуванням - це ваш "стандартний" ключ ssh. Вона складається з двох файлів (відкриті і закриті ключі) в вашому ~/.sshкаталозі, як правило , з ім'ям identity, id_rsa, id_dsa, id_ecdsaабо id_ed25519(і те ж саме з .pub), в залежності від типу ключа. Якщо ви не створили більше одного ключа ssh, вам не доведеться турбуватися про вказівку особи, ssh-copy-id просто вибере його автоматично.

Якщо у вас немає посвідчення особи, ви можете створити його за допомогою інструменту ssh-keygen.

Крім того, якщо сервер використовує порт, відмінний від стандартного ( 22), слід використовувати лапки таким чином ( джерело ):

ssh-copy-id "user@hostname.example.com -p <port-number>"

1
Що таке ідентифікація за замовчуванням?
Oxwivi

17
для різних портів використовуйте це:ssh-copy-id "user@host -p 6842"
jibon57

5
Що робити, якщо віддалений сервер, на який ви копіюєте, не дозволяє підказувати пароль, а в основному заблокований, крім збереження для доступу до SSH?
Cyle

10
На mac ви можете зробити, brew install ssh-copy-idа потім виконати команду.
Avishai

1
@MarcelStimberg, будь ласка, оновіть відповідь, щоб включити -i профіль; люди, ймовірно, мають більше 1 ключа і натискають на них усіх, або повинні полювати на варіант -i у коментарях
Нік

129

Мені подобається відповідь від Марселя. Я не знав цієї команди. Я завжди використовував те, що знайшов на веб-сайті Oracle :

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'

Я думав розмістити його ще тут, тому що це хороша ілюстрація того, що можна досягти в оболонковому коді з потужністю ssh. Але використовувати ssh-copy-idце, безумовно, більш безпечний спосіб зробити це правильно!

Зауважте, що якщо папки .sshще не існує, вищевказана команда не вдасться. Крім того, може бути краще при створенні файлу встановити мінімально можливий дозвіл (в основному, читати-писати лише для власника). Ось більш вдосконалена команда:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

2
Ці точні команди також працюють з Mac
Mihai P.

Він повинен працювати під будь-яким Unix з більшістю оболонок. Я оновлюю публікацію оновленою командою, якщо папка .sshне існує на віддаленій стороні.
Гюйгенс

1
catЧи не потрібен - нормальний вхід Перенаправлення досить, наприклад< ~/.ssh/id_rsa.pub | ssh ...
maxschlepzig

@Huygens Спасибі Більш корисно пам’ятати про це, оскільки вам нічого не потрібно встановлювати, і це також може бути корисним для виконання іноземних команд, наприклад, зміни дозволів на сервері, як ви продемонстрували у своєму розширеному прикладі.
Джонатан Комар

2
Я дуже віддаю перевагу цьому способу, оскільки він дозволяє використовувати багатослівний ssh, який корисний для з'ясування того, чому все порушено. sshcopyid просто замерз і ніколи не працював, це пройшло ідеально.
Сирени

31

Графічний метод

  1. Відкрийте програмиПаролі та ключіМої особисті ключі .
  2. Виберіть ключ і натисніть кнопку ВіддаленеНалаштування ключа для безпечної оболонки .

Налаштуйте комп'ютер для підключення SSH


У мене немає "Паролі та ключі шифрування" у своєму меню.
Хорхе Кастро

Який реліз Ubuntu ви використовуєте? У Ubuntu 10.04 LTS це повинно бути доступне за замовчуванням.
ændrük

10.10, щойно додав тег. Відповідь Марселя - це те, що я шукаю, хоча +1 для відповіді на робочий стіл!
Хорхе Кастро

4
Ця програма є seahorse.
Жиль

1
Я думаю, що ця програма знаходиться в меню System-> Налаштування в 10.10 (зараз не можу перевірити, я 10.04)
Huygens

18

У Ubuntu ви можете отримати свої ключі з Launchpad:

ssh-import-id [launchpad account name]

Деталі :

  1. Вам потрібен обліковий запис Launchpad, щоб увійти або створити обліковий запис
  2. Після входу в систему натисніть кнопку біля клавіш SSH:
  3. Вставте вміст файлу вашого відкритого ключа в це поле (включаючи коментар). Такий ключ виглядає так:

    ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
    

    Тут ssh-rsaвказується, що ключ - ключ RSA, AAAAB3Nza .... UyDOFDqJpє фактичним ключем і lekensteynє коментарем.

  4. Збережіть ключ, натиснувши Імпортувати відкритий ключ
  5. Якщо все пішло добре, тепер ваш ключ повинен бути вказаний під ключами SSH:

Пакет ssh-import-idповинен бути встановлений на машині, до якої потрібно отримати доступ віддалено. Цей пакет встановлюється разом із цим openssh-serverпакетом, оскільки це рекомендований пакет openssh-server. Переконавшись, що ssh-import-idвстановлено на клієнтській машині, запустіть:

ssh-import-id [launchpad account name]

Це завантажить відкритий ключ із серверів Launchpad через HTTPS, який захищає вас від MITM-атак.

На Ubuntu Lucid і раніше ви можете виконати те ж саме:

wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys

echoКоманда необхідна , щоб отримати додатковий символ нового рядка після рядка з ключем SSH.


14

для користувацького порту

ssh-copy-id -i "user@hostname.example.com -p2222"

-i переключити за замовчуванням до ~ / .ssh / id_rsa.pub, якщо ви хочете інший ключ, покладіть шлях ключа після -i

ПОПЕРЕДЖЕННЯ: Якщо ви не написали -i, він скопіює всі ваші ключі, знайдені в ~ / .ssh


1
Ви впевнені в цьому ПОПЕРЕДЖЕННІ? "-iдентифікатор_файлу - використовуйте лише ключ (и), що містяться в ідентифікаційному файлі (замість того, щоб шукати ідентичності за допомогою ssh-add (1) або в default_ID_file). Якщо ім'я файлу не закінчується .pub, це додається. Якщо ім'я файлу пропущено, використовується default_ID_file. "
Yousha Aleayoub

0

ssh-copy-idробить саме це. Я не впевнений, чому деякі інші відповіді додають неточну інформацію. Довідка показує наступне:

~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
    -f: force mode -- copy keys without trying to check if they are already installed
    -n: dry run    -- no keys are actually copied
    -h|-?: print this help

Я просто спробував наступне на клієнті Ubuntu 18.04 із сервером CentOS 7.6, і це спрацювало як шарм. Приклад показує використання користувальницького порту 2222та вказівку відкритого ключа на~/.ssh/path-to-rsa.pub

$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 myusername@hostname.tld

Перед виконанням команди я фактично використовував -nперемикач в кінці, щоб зробити сухий запуск, який підтвердив, що команда буде працювати за призначенням. Як тільки я це підтвердив, я знову запустив команду, як вище, без -nперемикача.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.