Как настроить SSH, чтобы мне не нужно было вводить пароль?
Как настроить SSH так, чтобы мне не приходилось вводить пароль при подключении к хосту?
Как настроить SSH так, чтобы мне не приходилось вводить пароль при подключении к хосту?
Если вы случайно используете GNOME, приложение seahorse (“Пароли и ключи шифрования”) может сделать это за вас: File -> New -> Secure Shell Key.
Если вы предпочитаете терминал, запустите ssh-keygen -t <type>
, чтобы сгенерировать пару ключей. Действительные типы пар ключей:
Программа запросит у вас кодовая фраза и место сохранения нового ключа. Рекомендуется использовать предложенный путь по умолчанию, так как все другие инструменты будут искать его там.
Снова, seahorse часто может сделать это за вас - в My Personal Keys щелкните правой кнопкой мыши по SSH ключу и выберите Configure key for secure shell.
Или, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
в терминале.
Или, полностью вручную, шаг за шагом:
.ssh
в домашнем каталоге удаленного пользователя на удаленном хосте. authorized_keys
(если его еще нет). umask
более либеральный, чем обычно, сделайте файл не доступным для групповой записи: chmod go-w ~/.ssh ~/.ssh/authorized_keys
. ~/.ssh/id_rsa.pub
) в удаленный файл ~/.ssh/authorized_keys
. Если вы загрузите ваш закрытый ключ в ssh agent, он будет хранить в памяти расшифрованный ключ. Мы хотим, чтобы это предотвратило повторный ввод пароля всякий раз, когда мы оболочки на сервере.
Сначала необходимо запустить агента или загрузить в переменную путь запущенного коммуникационного сокета. Запуск ssh-агента на терминале сгенерирует команды для назначения и установки переменных агента. Эти команды могут быть сохранены в файле для использования в другом терминале. Или же можно запустить эти команды и забыть о повторном использовании того же агента в другом терминале, например: eval $(ssh-agent)
.
Загрузка ключа - это простой вопрос выполнения ssh-add
и передачи ему парольной фразы.
Если вы используете GNOME, gnome-keyring-daemon обычно предоставляет ту же самую функциональность агента SSH, что и ssh-agent, так что вам не нужно ничего запускать. GNOME автоматически загрузит и разблокирует ключ при входе в систему.
Если все было сделано правильно, использование ssh user@server
не потребует ввода пароля. Если что-то не так с агентом, а не с ключом, вас попросят ввести парольную фразу для ключа, а не пароль для учетной записи пользователя.
Все, что использует ssh для связи, будет работать без ввода пароля учетной записи пользователя при загрузке правильного ключа в агенте. Такие программы, как scp, sftp и rsync используют это.
id_dsa
вместо id_rsa
, а ECDSA будет иметь id_ecdsa
.authorized_keys2
- но маловероятно, что вы найдете что-то старше 5.0. lsh
, ssh.com
и другие (Unix и не Unix) SSH-серверы не включены в данное руководство. Копирование открытого ключа на удаленный хост:
Сохранение переменных агента для повторного использования (подробный пример)
ssh-agent \> ~/.ssh/cross-terminal-agent . ~/.ssh/cross-terminal-agent
Вы не указали, на каком 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-агент, и просит агента выполнить для него магические трюки подписания.
Это можно сделать и в PuTTY на Windows.
Как только у вас будет настроена пара публичный/частный ключ (как показывают другие ответы здесь), запустите PuttyGen. Там загрузите существующий приватный ключ, который вы уже настроили, а затем сохраните его как PuTTY приватный ключ (ppk).
Затем в PuTTY, просто нажмите на сохраненную сессию, к которой хотите автоматически войти, и нажмите кнопку Загрузить. Отсюда перейдите в Connection -> Data в левой панели и в поле “Auto-login username” введите имя пользователя для этого удаленного сервера:
После этого перейдите в раздел “Подключение” -> SSH -> Auth, и найдите ppk, который вы сделали в PuttyGen:
Затем вернитесь на страницу сеанса и сохраните ранее загруженный сеанс.
Из очень похожего вопроса по ServerFault , я бы порекомендовал использовать ssh-copy-id , который выполняет все шаги по настройке ключей аутентификации за вас:
ssh-copy-id - это скрипт, использующий ssh для входа на удаленную машину (предположительно с использованием пароля для входа, поэтому аутентификация паролем должна быть включена, если только вы не использовали несколько учетных записей)
Он также изменяет права доступа в дом удаленного пользователя, ~/. ssh, и ~/.ssh/authorized_keys для удаления возможности групповой записи (что в противном случае помешает вам войти в систему, если в конфигурации удаленного sshd задан StrictModes).
Если задана опция -i, то используется файл идентификации (по умолчанию ~/.ssh/identity.pub), независимо от того, есть ли ключи в вашем ssh-агенте.
Все, что вам нужно сделать, это просто так:
ssh-copy-id user@host
Введите пароль один раз, и все готово!
Кроме того, что уже было сказано о том, как устанавливать ключи 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
Я написал это очень короткое руководство после того, как получил 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
Путти имеет [ 0x6 и ]0x3 и вариант, который позволит вам создать ярлык на рабочем столе, как этот:
"C:\Program Files\PuTTY\putty.exe" -ssh user@192.168.2.2 -pw your_password
ssh-keygen
. (Если он говорит вам, что вы должны указать тип, выполните ssh-keygen -t rsa
.) Когда он спросит вас о местоположении файла, возьмите значение по умолчанию. Когда он попросит вас ввести кодовую фразу, нажмите enter for no passpraase (Ввод без кодовой фразы). cat ~/.ssh/id_rsa.pub
(или любое другое место расположения файлов по умолчанию в ssh-keygen
, хотя вам нужно будет установить really старый ssh
, чтобы он отличался); скопируйте вывод в буфер обмена. ~/.ssh/authorized_keys
(если ~/.ssh
не существует, slogin
куда-нибудь; это простой и легкий способ получить его с нужными правами). Вставьте буфер обмена (содержащий id_rsa.pub
с другого хоста) в этот файл.Если вы хотите сделать все это в терминале в 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.
Надежда, которая поможет, если вы столкнетесь с проблемой конфигурации, которая часто опускается.