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


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


136
2017-07-18 16:51


происхождения


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


ответы:


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

Если вы используете GNOME, конек приложение («Пароли и ключи шифрования») может сделать это за вас: файл -> новый -> Безопасный ключ оболочки,

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

  • 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, гном-брелок-демон обычно предоставляет те же функции агента SSH, что и ssh-agent, поэтому вам не нужно начинать что-либо. GNOME автоматически загрузит и разблокирует ключ при входе в систему.

Shell на удаленный сервер без пароля

Если все было сделано правильно, используя ssh пользователь @ серверне запрашивает пароль. Если что-то не так с агентом, а не с ключом, вам будет предложено ввести пароль для ключа, а не пароль для учетной записи пользователя.

Все, что использует ssh для связи, будет работать без ввода пароля учетной записи пользователя, когда в агент будет загружен правильный ключ. Такие программы, как УПП, 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 / cross-terminal-agent
    , ~ / .ssh / кросс-терминал агента
    

152



ах, вы должны сказать «ssh-add {path-to-private-key-file}», а затем он попросит вас ввести вашу фразу. Пожалуйста, сделайте это более явным в своем сообщении. Вы также должны добавить «Четвертый, запустить ssh». Часть проблемы с документацией с этим материалом заключается в том, что он замалчивает очевидные шаги, которые НЕ очевидны для кого-то нового для процесса, который понятия не имеет, что происходит и как эти программы работают вместе. - Jason S
Джейсон: ssh-add -l проверяет, работает ли агент. ssh-add без аргументов добавит ключ из местоположения по умолчанию (которое равно ~ / .ssh / id_rsa). Во всяком случае, обновлено. - grawity
есть команда ssh-copy-id который копирует открытый ключ на целевой хост и автоматически устанавливает разрешения. - hasen
Отличный ответ! Он немного пропускает права доступа к файлам ключей - у меня была проблема, связанная с этим сегодня. Файл закрытого ключа должен быть доступен только мне, а файл открытого ключа должен быть доступен только для записи. - ripper234
Один лайнер: 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


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

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

ssh-keygen

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

ssh-copy-id username@server

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

Затем:

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


18





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

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

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

PuTTY username entry

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

PuTTY private key entry

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


11



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


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

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

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

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

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

ssh-copy-id user@host

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


3





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

Я знаю, что уже есть инструменты GNOME и KDE, которые делают то же самое, но если вы консольный наркоман type это отлично (и может использоваться в большинстве систем 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

3





http://linuxproblem.org/art_9.html

Ваша цель

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


2



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


Я написал этот очень короткий учебник после того, как ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО расстроен ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО длинными учебниками, потому что это так просто :)

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





шпатлевка имеет -pw вариант, который позволит вам создать ярлык на рабочем столе, как это:

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

2