2009-07-18 16:51:50 +0000 2009-07-18 16:51:50 +0000
155
155

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

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

Ответы (10)

167
167
167
2009-07-18 17:36:45 +0000

Сгенерируйте SSH-ключ (если у вас его нет)

Если вы случайно используете GNOME, приложение seahorse (“Пароли и ключи шифрования”) может сделать это за вас: File -> New -> Secure Shell Key.

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

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

Программа запросит у вас кодовая фраза и место сохранения нового ключа. Рекомендуется использовать предложенный путь по умолчанию, так как все другие инструменты будут искать его там.

Загрузка открытого ключа на удаленный сервер

Снова, seahorse часто может сделать это за вас - в My Personal Keys щелкните правой кнопкой мыши по SSH ключу и выберите Configure key for secure shell.

Или, 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. Наконец, каким-то образом скопируйте (добавьте) содержимое вашего локального public key (~/.ssh/id_rsa.pub) в удаленный файл ~/.ssh/authorized_keys.

Загрузите ключ в агент ssh

Если вы загрузите ваш закрытый ключ в ssh agent, он будет хранить в памяти расшифрованный ключ. Мы хотим, чтобы это предотвратило повторный ввод пароля всякий раз, когда мы оболочки на сервере.

Сначала необходимо запустить агента или загрузить в переменную путь запущенного коммуникационного сокета. Запуск ssh-агента на терминале сгенерирует команды для назначения и установки переменных агента. Эти команды могут быть сохранены в файле для использования в другом терминале. Или же можно запустить эти команды и забыть о повторном использовании того же агента в другом терминале, например: 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 и не Unix) SSH-серверы не включены в данное руководство.

Примеры:

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

  • Сохранение переменных агента для повторного использования (подробный пример) ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent

22
22
22
2009-07-18 17:28:34 +0000

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

Это все из вашей локальной настольной системы.

ssh-keygen

Убедитесь, что для имени ключа используется значение по умолчанию. Я предлагаю вам do установить парольную фразу на этот ключ, иначе это проблема безопасности. “-t rsa” было бы неплохой идеей, но, вероятно, в этом нет необходимости.

ssh-copy-id username@server

Это запросит у вас пароль, который вы бы использовали для входа в систему, и установит для вас authorized_ключ. (не нужно делать это вручную)

Тогда, вот это:

`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-агент, и просит агента выполнить для него магические трюки подписания.

11
11
11
2009-07-25 03:42:47 +0000

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

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

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

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

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

3
3
3
2009-07-18 17:39:21 +0000

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

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

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

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

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

ssh-copy-id user@host

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

3
3
3
2009-07-18 17:57:35 +0000

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

Я знаю, что уже есть утилиты GNOME и KDE, которые делают то же самое, но если вы используете тип console junkie, то это здорово (и может быть использовано на большинстве 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
2
2
2013-02-01 16:58:45 +0000

Я написал это очень короткое руководство после того, как получил REALLY REALLY REALLY разочаровался в REALLY REALLY длинные руководства, потому что на самом деле это так просто :)

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
2
2
2009-07-18 16:55:59 +0000

_COPY16_9.html

Ваша цель

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

2
2
2
2012-12-02 23:11:47 +0000

Путти имеет [ 0x6 и ]0x3 и вариант, который позволит вам создать ярлык на рабочем столе, как этот:

"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
1
1
1
2009-07-18 17:06:33 +0000
  1. На соединяющем хосте запустите ssh-keygen. (Если он говорит вам, что вы должны указать тип, выполните ssh-keygen -t rsa.) Когда он спросит вас о местоположении файла, возьмите значение по умолчанию. Когда он попросит вас ввести кодовую фразу, нажмите enter for no passpraase (Ввод без кодовой фразы).
  2. cat ~/.ssh/id_rsa.pub (или любое другое место расположения файлов по умолчанию в ssh-keygen, хотя вам нужно будет установить really старый ssh, чтобы он отличался); скопируйте вывод в буфер обмена.
  3. Войдите обычно на целевой хост в качестве учетной записи, к которой вы хотите подключиться. Отредактируйте файл ~/.ssh/authorized_keys (если ~/.ssh не существует, slogin куда-нибудь; это простой и легкий способ получить его с нужными правами). Вставьте буфер обмена (содержащий id_rsa.pub с другого хоста) в этот файл.
0
0
0
2012-10-25 12:27:48 +0000

Если вы хотите сделать все это в терминале в Linux:

В хосте

cd ~/.ssh/

ssh-keygen -t {rsa|dsa} -b {1024|2048|4096} -С “текст комментария, если хотите” -f id_ArbitraryName

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

Тогда вам нужно добавить права доступа к файлам authorized_keys и authorized_keys2.

кот id_ArbitraryName.pub >> authorized_keys

кот id_AribtraryName.pub >> authorized_keys2

Затем скачайте файл id_AribtraryName в окно, из которого вы хотите ssh. Если соединяющее окно основано на unix, может понадобиться файл конфигурации (в шпаклёвке, кто-то из вышеперечисленных).

В блоке подключения

В вашем конфигурационном файле - vim ~/.ssh/config

Host example.host.com # или имя компьютера

Имя пользователя

IdentityFile ~/.ssh/id_ArbitraryName

В конфигурационном файле требуются права доступа 600. Папка SSh требует 700.

Надежда, которая поможет, если вы столкнетесь с проблемой конфигурации, которая часто опускается.

Похожие вопросы

10
19
12
37
36