Як налаштувати ssh для аутентифікації за допомогою ключів замість імені користувача / пароля?


34

Як налаштувати ssh для аутентифікації користувача за допомогою клавіш замість імені користувача / пароля?

Відповіді:


27

Для кожного користувача: вони повинні генерувати (на своїй локальній машині) свою клавіатуру, використовуючи ssh-keygen -t rsa( rsaможна замінити dsaабо rsa1занадто, хоча ці параметри не рекомендуються). Потім їм потрібно помістити вміст свого відкритого ключа ( id_rsa.pub) ~/.ssh/authorized_keysна сервер, на якому ви входите в систему.


Єдине, що я хотів би додати до цього, - це переглянути дозволи на файл та каталог.
трент

2
Не забувайте chmod 0700 .ssh chmod 0600 .ssh / санкціоновані_кейси
Дейв Чейні

3
Однозначно генеруйте ключі таким чином, але потім перевірте повідомлення @Chris Bunch щодо "ssh-copy-id". Ось так можна передати "id_rsa.pub".
Гарет

@gyaresu: Дякую! Я просто дізнався щось нове! :-D
Кріс Єстер-Янг

23

Насправді я віддаю перевагу ssh-copy-id , скрипту, знайденому на * nix за замовчуванням (його можна також легко поставити на Mac OS X ), який автоматично робить це для вас. На чоловіковій сторінці:

ssh-copy-id - це скрипт, який використовує ssh для входу у віддалену машину (імовірно, використовуючи пароль для входу, тому автентифікацію пароля слід активувати, якщо ви не зробили певне розумне використання декількох ідентичностей)

Він також змінює дозволи дому віддаленого користувача, ~ / .ssh та ~ / .ssh / санкціоновані_кейси для видалення групової писемності (що інакше не дозволить вам увійти в систему, якщо для віддаленого sshd встановлено StrictModes).

Якщо параметр -i заданий, тоді використовується ідентифікаційний файл (за замовчуванням ~ / .ssh / identitet.pub), незалежно від того, чи є ключі у вашому ssh-агенті.


2
@Chris Bunch ВСЯКОГО ШУКАЙТЕ ТУТ! :) ssh-copy-id - це безумовно спосіб поділитися своїм id_rsa.pub
Гарет

1
Класно, я ніколи про це не знав ... Я написав власний сценарій, щоб зробити саме те саме: - /
David Z

6

Хм, не розумій. Просто створіть ключ і почніть. :) ЯК Додатково ви можете заборонити вхід через пароль. Наприклад, / etc / ssh / sshd_config:

PasswordAuthentication no

2
А також вам потрібно встановити UsePAM ні (або налаштувати PAM відповідно). Дивно, скільки ГОТО пропускають цю частину. Якщо цього не зробити, це призведе до того, що ви все одно зможете увійти за допомогою пароля.
Натан

3

Це досить прямо вперед , щоб зробити - є просте покрокове керівництво , щоб бути тут .

Основні моменти:

  • Запустіть ssh-keygenна своїй машині. Це створить для вас публічні та приватні ключі.
  • Скопіюйте та вставте вміст відкритого ключа (можливо, в ~/.ssh/id_rsa.pub) ~/.ssh/authorized_keysна віддалену машину.

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


Рекомендую замість копіювання вирізати і вставити. Файл санкціонованих_кілів може містити кілька клавіш, і ви не хочете, щоб розблокувати інші клавіші, які вже є там.
Кріс Єстер-Янг

Моє улюблене посібник було надіслано машині Wayback: web.archive.org/web/20061103161446/http://…
Філіп Дурбін

@Chris oops - я мав на увазі скопіювати його у файл, а не перезаписувати! Відповідь оновлена ​​зараз для уточнення
ConroyP


1

Підсумовуючи сказане іншими, налаштування ключів SSH - це легко і безцінно.

На комп'ютері , який буде SSHing від вас буде потрібно згенерувати пару ключів:

claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius

Просто натисніть клавішу Enter, де зазначено, і введіть парольну фразу при появі запиту - в ідеалі це відрізняється від вашого звичайного пароля для входу як на поточному хості, так і на ті, на які ви будете SSHing.

Далі, вам потрібно скопіювати ключ , який ви тільки що згенерований на хост , який ви хочете SSH до . У більшості дистрибутивів Linux для цього є інструмент ssh-copy-id:

claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Якщо у вашому розповсюдженні цього немає, слід скопіювати ключ до цільового хоста та додати його до (можливо, існуючого) .ssh/authorized_keysфайлу:

claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub                                    100% 1119     1.1KB/s   00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May  9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys

Нарешті, щоб отримати максимальну вигоду від ключів SSH, вам потрібно буде запустити агент SSH. Якщо ви використовуєте робоче середовище (Gnome, KDE та ін.), То лише вихід із системи та повернення запустить для вас SSH-агент. Якщо немає, то ви можете додати наступні рядки в оболонці RC файл ( .bashrc, .profileі т.д.):

SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi

1

Це призначено як контрольний список. Якщо дотримуватися цього покроково, слід охоплювати найпоширеніші доступи до без паролів. Більшість цих моментів згадуються в інших місцях; це агрегація.

На кожному апараті під обліковим записом повинен бути ~/.sshкаталог, chmod 700який походить або отримує з'єднання.

(Приватний) ключ повинен бути згенерований без парольної фрази, або можна запустити агент, який міститиме розшифровану версію ключа, що містить парольну фразу для клієнтів. Запустіть агент із ssh-agent $SHELL. Це $SHELLчастина, яка зайняла мені час, щоб знайти. Перегляньте довідкову сторінку, оскільки тут є різноманітні деталі, якщо ви хочете використовувати агент.

Не забувайте, що останніми версіями sshd не приймаються слабкі (<2048 бітові DSA) клавіші.

Далі повинні бути зроблено на стороні клієнта машині відбувається з'єднання.

  1. Ваш приватний ключ повинен бути розміщений ~/.ssh/id_rsaабо, ~/.ssh/id_dsaяк це доречно. Ви можете використовувати інше ім'я, але тоді воно повинно бути включено в параметр -i в команді ssh на машині, що створює файл, щоб явно вказати приватний ключ.

  2. Ваш приватний ключ повинен бути chmod 600.

  3. Перевірте, чи ваша домашня папка chmod 700.

Тепер дозволити машині отримувати запит. Поширена модель - це коли адміністратор надає вам доступ до машини, якою ви не володієте (наприклад, спільного веб-хостингу). Тому ідея ssh полягає в тому, що ви пропонуєте свій відкритий ключ тому, хто надає вам рахунок. Ось чому ви, як правило, не ставите приватні ключі на апарат, який отримує запити. Але якщо ви хочете, щоб ця машина також виконувала вихідний ssh, тоді ви повинні ставитися як до вихідної машини з описаними вище кроками.

  1. Ваш публічний ключ повинен бути поміщений в файл з ім'ям ~/.ssh/authorized_keysпід обліковим записом , яка буде приймати з'єднання. Тут також можна розмістити інші ключі, дозволених підключатися через цей рахунок. Особливо складна річ, якщо ви знаходитесь у vi і вставляєте ключ у файл із буфера вставки в PuTTY, це: ключ починається з "ssh-". Якщо ви не перебуваєте в режимі вставки, перший "s" переведе vi в режим вставки, а решта клавіші буде виглядати просто чудово. Але вам не вистачить "s" на початку ключа. Мені потрібні були дні, щоб знайти це.
  2. Мені подобається chmod 600 ~/.ssh/authorized_keys. Він повинен бути як мінімум gw.
  3. Тепер у кеш потрібно додати відбиток хоста. Перейдіть до машини A і натисніть на машину B вручну. Перший раз ви отримаєте запит на кшталт "Ви хочете додати ... до кеша хост-ключа?". Якщо ви намагаєтеся отримати автоматизацію (наприклад, скрипт) для використання цього логіна, ви повинні переконатися, що ssh-клієнт, який використовує автоматизація, не отримає це запит.

0

Як вже говорили інші, ваші користувачі повинні робити собі клавіші на своїх клієнтських машинах за допомогою ssh-keygen та додавати їх відкритий ключ до ~ / .ssh / санкціонованих ключів на машині, на якій вони хочуть увійти.

Для більш детальної інформації, проте, я настійно рекомендую SSH, The Secure Shell .


0

Тут є хороша порада, тому я не повторюю її. Після того, як ви встановите один сервер, який дозволяє входити за допомогою клавіш, ви можете налаштувати інших, щоб вони зробили те ж саме з цим вкладишем:

remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done

Просто введіть CD у свій домашній каталог, визначте віддалену змінну як одне або багато імен серверів і зробіть купу відразу. Пароль, який він запитує, буде вашим ssh-паролем для віддаленого сервера. Звичайно, ви можете використовувати спрощену версію без for-loop:

tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"

ПАМ’ЯТАЙТЕ. Копіюйте лише свої відкриті ключі. Ви не хочете, щоб ваші приватні ключі сиділи на якомусь сервері, де кожен із судо може скопіювати їх і змусити ваші парольні фрази.

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