Как настроить SSH, чтобы мне не приходилось вводить свой пароль?

110602
Richard Hoskins

Как настроить SSH, чтобы мне не приходилось вводить пароль при подключении к хосту?

138
Можно возразить, если для использования таких ключей не требуется пароль. Чтобы любой, кто завладеет вашим закрытым ключом, не смог его использовать, можно защитить ключ с помощью самого пароля. Конечно, можно оставить этот пароль пустым, но во многих случаях это не рекомендуется. Arjan 11 лет назад 0
На последнем Cygwin с последней версией SSH меня снова запрашивали, потому что мне нужно было внести изменения в мой `~ / .ssh / config`, который теперь требуется` PubkeyAcceptedKeyTypes ssh-rsa *, ssh-dss * ` HDave 4 года назад 0

10 ответов на вопрос

156
grawity

Сгенерируйте ключ 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-agent на терминале сгенерирует команды для назначения и установки переменных агента. Эти команды могут быть сохранены в файл для использования в другом терминале. Кроме того, можно выполнить эти команды и забыть о повторном использовании того же агента в другом терминале. например: eval $(ssh-agent).

Загрузка ключа - это простой вопрос выполнения ssh-addи присвоения ему парольной фразы.

Если вы используете GNOME, gnome-keyring-daemon обычно предоставляет те же функциональные возможности агента SSH, что и ssh-agent, поэтому вам не нужно ничего запускать. 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  cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / authorized_keys '# или это 
  • Переменные агента сохранения для повторного использования (подробный пример)
    ssh-agent> ~ / .ssh / кросс-терминальный агент, ~ / .Ssh / кросс-терминал агента 
запустите "ssh-add -l": я сделал это, и там написано "Агент не имеет идентификаторов" ... и что теперь? Jason S 11 лет назад 0
ах, вы должны сказать «ssh-add », и тогда он спросит вас о вашей ключевой фразе. Пожалуйста, сделайте это более явным в своем посте. Вы также должны добавить «В-четвертых, запустить SSH». Часть проблемы с документацией с этим материалом состоит в том, что он закрывает кажущиеся очевидными шаги, которые НЕ очевидны для кого-то новичка в процессе, который не знает, что происходит и как эти программы работают вместе. Jason S 11 лет назад 6
Джейсон: ssh-add -l должен проверить, работает ли агент. ssh-add без аргументов добавит ключ из местоположения по умолчанию (это ~ / .ssh / id_rsa). Во всяком случае, обновляется. grawity 11 лет назад 1
есть команда `ssh-copy-id`, которая копирует открытый ключ на целевой хост и автоматически устанавливает разрешения. hasen 11 лет назад 4
Отличный ответ! Немного не хватает о правах доступа к файлам ключей - у меня сегодня была проблема, связанная с этим. Файл закрытого ключа должен быть доступен только мне, а файл открытого ключа - только для записи мной. ripper234 9 лет назад 1
Стоит отметить, что после того, как вы настроили ключи SSH, вы должны рассмотреть возможность отключения аутентификации по паролю через SSH, установив `PasswordAuthentication no` в` / etc / sshd_config`. dimo414 5 лет назад 0
Примечание: GNOME `seahorse` [пока не поддерживает] (https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/201786) ключи с использованием [ed25519] (https: // en .wikipedia.org / wiki / EdDSA) в своем сокете `ssh-agent` (и не позволяет [создавать ключи ed25519] (https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/1420522) ). Для этого вам нужен официальный OpenSSH `ssh-agent`. [Подробности и инструкции здесь] (https://unix.stackexchange.com/a/189646/87770) Adam Katz 4 года назад 0
Одна строка: `ssh-keygen -f ~ / .ssh / id_rsa -N" "; ssh-copy-id -i ~ / .ssh / id_rsa username @ server-ip-or-address` (просто замените` username @ server -ip или-address`). totymedli 2 года назад 1
но теперь меня просят вставлять пароль SSH каждый раз, когда я вхожу João Pimentel Ferreira 2 года назад 0
Отличный учебник! Работает как шарм George Chalhoub 2 года назад 0
18
freiheit

Вы не указали, какой 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-agent в фоновый режим и устанавливает переменные окружения для общения с ним. Во втором случае агент запускает для вас оболочку, поэтому при выходе из оболочки агент завершается.

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

Тогда, наконец:

ssh-add 

Он попросит пароль; дайте тот, который вы дали ssh-keygen. Есть также способы сделать это графически. И вы можете поместить ssh-agent и ssh-add в свои сценарии входа (настройка отличается в зависимости от используемой оболочки), чтобы автоматизировать это, но некоторые варианты Unix (например, текущий Ubuntu Linux) делают большую часть этого автоматически, поэтому все, что вам действительно нужно сделать, это создать ключ и использовать ssh-copy-id, чтобы установить его на удаленном хосте.

Теперь " ssh username@server" должен работать без запроса какой-либо аутентификации. За кулисами он использует ключ, который держит ssh-agent, и просит агента сделать для него магические трюки с подписью.

11
スーパーファミコン

Это можно сделать и в PuTTY на Windows.

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

Затем в PuTTY, просто нажмите на сохраненный сеанс, в который вы хотите выполнить автоматический вход, и нажмите «Загрузить». Отсюда перейдите в Connection -> Data на левой панели и в поле «Auto-login username» введите имя пользователя для этого удаленного сервера:

PuTTY username entry

После этого зайдите в Connection -> SSH -> Auth и найдите ppk, который вы сделали в PuttyGen:

PuTTY private key entry

Затем вернитесь на страницу сеанса и сохраните сеанс, который вы загрузили ранее.

Первая ссылка на изображение "PuTTY username entry", кажется, не работает. Peter Mortensen 11 лет назад 0
PuTTY включает собственную версию ssh-agent; это называется Pageant. Он работает в системном трее и держит ваш ключ для вас. Вам не нужно когда-либо запускать ssh-agent, просто отметьте «Разрешить переадресацию агента» в настройках PuTTY в разделе Auth, и соединение Pageant будет перенаправлено на удаленный конец, чтобы сделать ваш ключевой агент доступным для него. Kevin Panko 11 лет назад 2
3
Chris Bunch

Из очень похожего вопроса о ServerFault я бы порекомендовал использовать ssh-copy-id, который выполняет все шаги, связанные с настройкой ключей аутентификации для вас:

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

Он также изменяет права доступа к домашнему файлу удаленного пользователя, ~ / .ssh и ~ / .ssh / authorized_keys, чтобы удалить возможность записи группы (в противном случае вы не сможете войти в систему, если в удаленной конфигурации sshd установлены StrictModes).

Если задана опция -i, то используется файл идентификации (по умолчанию ~ / .ssh / identity.pub), независимо от того, есть ли какие-либо ключи в вашем ssh-agent.

Все, что вам нужно сделать, это просто:

ssh-copy-id user@host 

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

3
scetoaux

Помимо всего, что уже было сказано о том, как установить 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/$-sh ] && . ~/.keychain/$-sh [ -f ~/.keychain/$-sh-gpg ] && . ~/.keychain/$-sh-gpg fi 
2
TheTXI

http://linuxproblem.org/art_9.html

Ваша цель

Вы хотите использовать Linux и OpenSSH для автоматизации ваших задач. Поэтому вам необходим автоматический вход с хоста A / пользователя a на хост B / пользователя b. Вы не хотите вводить какие-либо пароли, потому что вы хотите вызвать ssh из сценария оболочки.

Пониженное голосование было не моим, но я не возражал бы против того, чтобы люди удаляли свой ответ, если бы заметили, что кто-то другой опубликовал почти такой же ответ несколькими мгновениями ранее. Arjan 11 лет назад 1
Арджан: По большей части я согласен с вами, но когда посты разделяются только на несколько секунд, я не обязательно думаю, что будет справедливо наказать человека на втором месте. Я не говорю, что вы должны вознаградить их за голосование, но голосование вниз создает впечатление, что ответ неправильный, а не вовремя TheTXI 11 лет назад 2
2
Genc Hosting

Putty has a -pw option that let's you create a shortcut on desktop like this:

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

I wrote this very very short tutorial after getting REALLY REALLY frustrated with REALLY REALLY long tutorials cos really it's so simple :)

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 
1
chaos
  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с другого хоста) в этот файл.
-1 за предложение не добавлять парольную фразу. Без ключевой фразы любой, кто читает файл, теперь может выдавать себя за законного пользователя. bortzmeyer 11 лет назад 3
Сначала он попросил не вводить свой пароль; Я действительно не думал, что необходимость вводить фразу-пароль вместо его пароля будет улучшением. Во-вторых, вы не правы; Вот почему есть открытый ключ и закрытый ключ, поэтому открытый ключ может быть в мире. chaos 11 лет назад 2
Соответствующий пароль вводится при генерации ключа, а не при каждом подключении. Правильный? Richard Hoskins 11 лет назад 0
Нет. Ключи, сгенерированные с парольной фразой, требуют, чтобы парольная фраза вводилась при каждом использовании ключа. chaos 11 лет назад 0
Неправильно. С помощью ssh-agent (см. Принятый ответ) вы вводите пароль только один раз за сеанс. bortzmeyer 11 лет назад 2
0
nerdwaller

If you want to do it all in the terminal in Linux:

On the host

cd ~/.ssh/

ssh-keygen -t -b -C "some comment text if you want" -f id_ArbitraryName

The items in the {} are options, use rsa or dsa and choose the bit size (bigger is more secure)

Then you need to add the permissions to the authorized_keys and authorized_keys2 files.

cat id_ArbitraryName.pub >> authorized_keys

cat id_AribtraryName.pub >> authorized_keys2

Then download the id_AribtraryName file to the box you want to ssh from. If the connecting box is unix based, a config file may be necessary (in putty, someone above covered that).

On the Connecting Box

In your config file - vim ~/.ssh/config

Host example.host.com # or your computer name

User username

IdentityFile ~/.ssh/id_ArbitraryName

The config file needs permissions of 600. The SSh folder needs 700.

Hope that helps if you run into the config issue that is omitted a lot.