Як встановити SSH, щоб мені не потрібно було вводити пароль?


153

Як налаштувати SSH, щоб мені не довелося вводити свій пароль під час підключення до хоста?


Можна заперечити, якщо для використання таких ключів не потрібен пароль. Щоб уникнути того, що кожен, хто отримає ваш приватний ключ, може фактично його зловживати, він може захистити ключ паролем. Звичайно, пароль можна залишити порожнім, але є багато випадків, коли це не рекомендується.
Ар'ян

На останньому Cygwin із останньою SSH мене знову ~/.ssh/configPubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
запросили,

Відповіді:


164

Створіть ключ SSH (якщо у вас його немає)

Якщо ви користуєтесь GNOME, додаток морський коник ("Паролі та ключі шифрування") може зробити це за вас: Файл -> Нове -> Захищений ключ оболонки .

Якщо ви віддаєте перевагу терміналу, запустіть, щоб створити ключ. Дійсні типи ключових слів:ssh-keygen -t <type>

  • rsa: за замовчуванням
  • dsa: більш-менш еквівалент, за винятком 1024 бітових клавіш
  • ecdsa: така ж безпека з меншими клавішами, але відносно нова і дещо рідкісна в програмному забезпеченні SSH.
  • ed25519: Висока безпека (більш стійка до атак бічних каналів і слабких генераторів випадкових чисел). Дуже швидке покоління підписів. Зовсім нове. Доступний лише у OpenSSH> = 6.5 .

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

Завантажте відкритий ключ на віддалений сервер

Знову ж, морський коник часто може це зробити для вас - у розділі Мої особисті клавіші правою кнопкою миші клацніть на вашій SSH-клавіші та виберіть Налаштувати ключ для захищеної оболонки .

Або ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-hostв терміналі.

Або повністю вручну покроково:

  1. Створіть каталог (якщо він вже не існує), іменований .sshу домашній директорії віддаленого користувача на віддаленому хості.
  2. У цьому каталозі створіть файл з назвою authorized_keys(якщо він ще не існує).
  3. У разі , якщо ваш пульт umaskє більш ліберальним , ніж зазвичай, зробити файл не групову записується: chmod go-w ~/.ssh ~/.ssh/authorized_keys.
  4. Нарешті, якось скопіюйте (додайте) вміст локального відкритого ключа ( ~/.ssh/id_rsa.pub) у віддалений ~/.ssh/authorized_keysфайл.

Завантажте ключ в ssh-агент

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

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

Завантаження ключа - це проста задача виконання ssh-addта надання йому фрази пропуску.

Якщо ви використовуєте GNOME, gnome-keyring-daemon зазвичай забезпечує ту саму функціональність агента SSH, що і ssh-агент, тому вам не потрібно нічого запускати. GNOME автоматично завантажить і розблокує ключ під час входу.

Обстріляйте віддалений сервер без пароля

Якщо все було зроблено правильно, використання не підкаже вам пароль. Якщо з агентом, а не ключем, щось не так, вам буде запропоновано ввести ключ проходу для ключа, а не пароль для облікового запису користувача.ssh user@server

Все, що використовує ssh для спілкування, працюватиме без введення пароля облікового запису користувача, коли в агент завантажений правильний ключ. Такі програми, як scp , sftp та rsync, використовують це.


Примітки:

  • Вам потрібен лише ключ SSHv2, оскільки SSHv1 дуже небезпечний і тепер не використовується.
  • Вам також потрібен лише один тип ключа - достатньо або RSA, або DSA. (ed25519 та ECDSA є останніми і тому не підтримуються повсюдно).
  • Усі ці кроки однакові як для клавіш RSA, так і для DSA. Якщо ви використовуєте DSA, використовуйте id_dsaзамість id_rsa, а ECDSA матиме id_ecdsa.
  • Використовувались сервери OpenSSH, старші ніж 3.0, authorized_keys2але навряд чи ви знайдете що-небудь старше 5,0, яке ви використовуєте.
  • Ці інструкції стосуються лише OpenSSH версії 3.0 та новіших. lsh, ssh.comта інші (Unix та не) SSH-сервери не включені до цього підручника.

Приклади:

  • Копіювання відкритого ключа на віддалений хост:

    ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this
    
    кіт ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \
          'mkdir -p ~ / .ssh; cat >> ~ / .ssh / pooblasti_keys '# або це
    
  • Збереження змінних агента для повторного використання (детальний приклад)
    ssh-agent> ~ / .ssh / перехресний-агент
    . ~ / .ssh / перехресний-агент
    

7
ах, ви повинні сказати "ssh-add {path-to-private-key-file}", і тоді він попросить вас пройти парольну фразу. Будь ласка, зробіть це більш явним у своєму дописі. Також слід додати "Четверте, запустіть ssh". Частина проблеми документації з цим матеріалом полягає в тому, що він переглядає, здавалося б, очевидні кроки, які НЕ очевидні для когось нового в процесі, який не має уявлення, що відбувається і як ці програми працюють разом.
Jason S

1
Jason: ssh-add -l - це перевірити, чи працює агент. ssh-add без аргументів додасть ключ від розташування за замовчуванням (це ~ / .ssh / id_rsa). У будь-якому разі оновлено.
grawity

4
є команда, ssh-copy-idяка копіює відкритий ключ на цільовий хост і автоматично встановлює дозволи.
hasen

1
Чудова відповідь! Тут трохи не вистачає дозволів на використання ключових файлів - у мене просто сьогодні була проблема, пов'язана з цим. Файл приватного ключа повинен бути доступний лише мені, а файл із відкритим ключем має бути доступним лише для мене.
ripper234

1
Один вкладиш: ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address(просто замініть username@server-ip-or-address).
totymedli

22

Ви не вказали, на якому Unix увімкнено, з яким Unix ви підключаєтесь, яку оболонку ви використовуєте, який варіант SSH ви використовуєте тощо. Тому дещо з цього, можливо, потрібно трохи відрегулювати; це засновано на досить недавніх версіях OpenSSH, які використовуються у багатьох варіантах unix.

Це все з вашої локальної настільної системи.

ssh-keygen

Обов’язково використовуйте за замовчуванням ім'я ключа. Я вважаю , що ви робите встановити кодову фразу на цьому ключі, в іншому випадку це проблема безпеки. "-t rsa" не була б поганою ідеєю, але, ймовірно, не потрібна.

ssh-copy-id username@server

Це запитає вас про пароль, який ви використовуєте для входу в систему, і налаштує для вас санкціоновані матеріали (не потрібно робити це вручну)

Потім, це:

`ssh-agent`

а може це:

exec ssh-agent sh

або:

exec ssh-agent bash

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

Багато сучасних варіантів Unix вже матимуть запуск агента, особливо якщо ви ввійшли в систему графічно. Ви можете спробувати " ps aux | grep ssh-agent" або " ps -ef | grep ssh-agent"; якщо щось вже працює, використовуйте це.

Потім, нарешті:

ssh-add

Він буде просити парольну фразу; дайте йому той, кому ви дали ssh-keygen. Є також способи змусити його запитати графічно. І ви можете помістити ssh-агент та ssh-add речі до своїх скриптів для входу (налаштування відрізняється залежно від оболонки, яку ви використовуєте) для автоматизації цього, але деякі варіанти Unix (наприклад, поточний Ubuntu Linux) роблять більшість цього автоматично, так що все, що вам потрібно зробити, це створити ключ і використовувати ssh-copy-id, щоб встановити його на віддаленому хості.

Тепер " ssh username@server" має працювати, не вимагаючи автентифікації. За лаштунками використовується ключ, який тримає ssh-агент, і попросити агента виконати для нього магічні підписи.


11

Це можливо зробити і в PuTTY в Windows.

Після того, як у вас буде налаштована пара відкритих / приватних ключів (як показують інші відповіді тут), запустіть PuttyGen. Там завантажте наявний приватний ключ, який ви вже створили, а потім збережіть його як приватний ключ PuTTY (ppk).

Потім у PuTTY просто натисніть на збережений сеанс, на який потрібно авторизуватися, та натисніть Завантажити. Звідси перейдіть у З'єднання -> Дані на лівій панелі та введіть "Ім'я користувача автозавантаження" в імені користувача для цього віддаленого сервера:

Запис ім'я користувача PuTTY

Після цього перейдіть до Connection -> SSH -> Auth та перегляньте ppk, який ви створили в PuttyGen:

Запис приватного ключа PuTTY

Потім поверніться на сторінку сеансу і збережіть сеанс, який ви завантажили раніше.


Перше посилання на зображення, "Введення імені користувача PuTTY", здається, порушено.
Пітер Мортенсен

2
PuTTY включає власну версію ssh-агента; це називається Pageant. Він працює в системному треї і тримає ваш ключ для вас. Вам не потрібно ніколи запускати ssh-агент, просто встановіть прапорець "Дозволити переадресацію агента" в параметрах PuTTY в розділі Auth, і з'єднання Pageant буде перенаправлено на віддалений кінець, щоб ваш ключовий агент був доступний для нього.
Кевін Панько

3

З дуже схожого питання на ServerFault я рекомендую використовувати ssh-copy-id , який виконує всі кроки, пов’язані з налаштуванням ключів аутентифікації для вас:

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

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

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

Все, що вам потрібно зробити, це просто:

ssh-copy-id user@host

Введіть свій пароль один раз, і ви готові йти!


3

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

Я знаю, що вже є інструменти GNOME та KDE, які роблять те саме, але якщо ви є консольним наркоманом, це чудово (і може використовуватися в більшості систем Unix).

Щоб скористатися ним, просто додайте до себе таке ~/.bashrc(подібне до інших оболонок):

if type keychain >/dev/null 2>/dev/null; then
  keychain --nogui -q <all your SSH/PGP keys>
  [ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
  [ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi

2

http://linuxproblem.org/art_9.html

Ваша мета

Ви хочете використовувати Linux та OpenSSH для автоматизації завдань. Тому вам потрібен автоматичний вхід від хоста A / user a до Host B / user b. Ви не хочете вводити паролі, оскільки ви хочете викликати ssh із скрипту оболонки.


1
Оголошення не було моїм, але я б не заперечував проти того, щоб люди видалили свою відповідь, якби вони помітили, що хтось інший опублікував майже подібну відповідь за кілька моментів раніше.
Ар'ян

2
Арджан: Здебільшого я з вами згоден, але коли пости розділені лише на кілька секунд, я не обов'язково вважаю, що справедливо карати людину на 2-му місці. Я не кажу, що ви повинні винагородити їх, відмовляючи, але зволікання створює враження, що відповідь неправильна, а не вчасно
TheTXI

2

Я написав цей дуже короткий підручник після того, як я дійсно дуже засмутився ДІЙСНУ ДІЙСНІ довгі підручники, адже це так просто :)

test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"

scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password

ssh destID@destMachine #type password

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

rm /tmp/id_rsa.pub

2

У програмі Putty є -pwможливість створити ярлик на робочому столі так:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password

1
  1. На підключувальному хості запустіть ssh-keygen. (Якщо він говорить про те, що вам потрібно вказати тип, зробіть це ssh-keygen -t rsa.) Коли він запитає про розташування файлу, прийміть за замовчуванням. Коли він попросить вас ввести парольну фразу, натисніть клавішу Enter без парольної фрази.
  2. cat ~/.ssh/id_rsa.pub(або як би не було розташування файлів за замовчуванням ssh-keygen, хоча вам слід було б встановити справді стару sshустановку, щоб вона була іншою); скопіюйте вихід у буфер обміну.
  3. Зазвичай увійдіть до цільового хоста як облікового запису, до якого потрібно підключитися. Відредагуйте файл ~/.ssh/authorized_keys(якщо ~/.sshйого немає, sloginдесь це простий і простий спосіб створити його з правильними дозволами). Вставте буфер обміну (що містить id_rsa.pubіншого хоста) у цей файл.

3
-1 за те, що пропонують не додавати парольну фразу. Без парольної фрази кожен, хто читає файл, тепер може представляти себе законним користувачем.
борцмейер

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

Запропонований пароль вводиться під час генерації ключа, а не кожного разу при підключенні. Правильно?
Річард Хоскінс

Ні. Клавіші, згенеровані за допомогою парольної фрази, вимагають вводити парольну фразу кожного разу при використанні ключа.
хаос

2
Неправильно. За допомогою ssh-агента (див. Прийняту відповідь) ви вводите пароль лише один раз за сеанс.
bortzmeyer

0

Якщо ви хочете зробити це все в терміналі в Linux:

На господаря

cd ~ / .ssh /

ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "текст коментаря, якщо ви хочете" -f id_ArbitraryName

Елементи в {} - це параметри, використовуйте rsa або dsa та вибирайте розмір бітів (більший - безпечніший)

Тоді вам потрібно додати дозволи до файлів санкціонованих_кілей та авторизованих_кісів2.

cat id_ArbitraryName.pub >> санкціоновані_кількі

cat id_AribtraryName.pub >> санкціоновані_кейси2

Потім завантажте файл id_AribtraryName у вікно, з якого потрібно сш. Якщо вікно з'єднання засноване на Unix, може знадобитися файл конфігурації (у шпаклівці, хтось над цим покрив).

На підключувальній коробці

У своєму конфігураційному файлі - vim ~ / .ssh / config

Хост example.host.com # або ім'я комп'ютера

Ім'я користувача

IdentityFile ~ / .ssh / id_ArbitraryName

Конфігураційному файлу потрібно дозволу 600. Папці SSh потрібно 700.

Сподіваємось, що це допоможе, якщо ви зіткнетеся з проблемою конфігурації, яка дуже пропущена.

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