Как настроить SSH, чтобы мне не приходилось вводить пароль при подключении к хосту?
~/.ssh/config
который сейчас требуется PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Как настроить SSH, чтобы мне не приходилось вводить пароль при подключении к хосту?
~/.ssh/config
который сейчас требуется PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Ответы:
Если вы используете GNOME, приложение « морской конек» («Пароли и ключи шифрования») может сделать это за вас: Файл -> Создать -> Ключ защищенной оболочки .
Если вы предпочитаете терминал, запустите для создания пары ключей. Допустимые типы пар ключей:ssh-keygen -t <type>
Программа попросит вас ввести ключевую фразу и место, где сохранить новый ключ. Рекомендуется использовать предложенный путь по умолчанию, потому что все другие инструменты будут искать его там.
Опять же, морские коньки часто могут сделать это за вас - в разделе «Мои личные ключи» щелкните правой кнопкой мыши свой SSH-ключ и выберите « Настроить ключ для защищенной оболочки» .
Или 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 , он сохранит расшифрованный ключ в памяти. Мы хотим, чтобы избежать повторного ввода пароля всякий раз, когда мы подключаемся к серверу.
Во-первых, агент должен быть запущен, или путь запущенного коммуникационного сокета должен быть загружен в переменную. Запуск ssh-agent на терминале сгенерирует команды для назначения и установки переменных агента. Эти команды могут быть сохранены в файл для использования в другом терминале. Кроме того, можно выполнить эти команды и забыть о повторном использовании того же агента в другом терминале. например: 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 , а не) сервера 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-copy-id
которая копирует открытый ключ на целевой хост и автоматически устанавливает разрешения.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(просто заменить username@server-ip-or-address
).
Вы не указали, какой 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, и просит агента сделать для него магические трюки с подписью.
Это можно сделать и в PuTTY на Windows.
Как только вы настроите пару открытый / закрытый ключ (как показывают другие ответы), запустите PuttyGen. Там загрузите существующий закрытый ключ, который вы уже настроили, а затем сохраните его как закрытый ключ PuTTY (ppk).
Затем в PuTTY просто нажмите на сохраненную сессию, в которую вы хотите выполнить автоматический вход, и нажмите «Загрузить». Отсюда перейдите в Connection -> Data на левой панели и в поле «Auto-login username» введите имя пользователя для этого удаленного сервера:
После этого перейдите в Connection -> SSH -> Auth и найдите ppk, который вы сделали в PuttyGen:
Затем вернитесь на страницу сеанса и сохраните сеанс, который вы загрузили ранее.
Из очень похожего вопроса о 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
Введите пароль один раз, и все готово!
Помимо всего того, что уже было сказано о том, как установить 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
http://linuxproblem.org/art_9.html
Ваша цель
Вы хотите использовать Linux и OpenSSH для автоматизации ваших задач. Поэтому вам необходим автоматический вход с хоста A / пользователя a на хост B / пользователя b. Вы не хотите вводить какие-либо пароли, потому что вы хотите вызвать ssh из сценария оболочки.
Я написал этот очень очень короткий урок после того, как ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО разочаровался в ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО длинных уроках, потому что на самом деле это так просто :)
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
ssh-keygen
. (Если он говорит вам, что вы должны указать тип, сделайте ssh-keygen -t rsa
.) Когда он попросит вас указать местоположение файла, выберите значение по умолчанию. Когда вас попросят ввести фразу-пароль, нажмите Enter, чтобы не ввести фразу-пароль.cat ~/.ssh/id_rsa.pub
(или где бы ни было расположение файла по умолчанию ssh-keygen
, хотя вам понадобится действительно старая ssh
установка, чтобы она отличалась); скопируйте вывод в буфер обмена.~/.ssh/authorized_keys
(если ~/.ssh
его не существует, slogin
куда-то; это простой и легкий способ создать его с правильными разрешениями). Вставьте ваш буфер обмена (содержащий id_rsa.pub
с другого хоста) в этот файл.Если вы хотите сделать все это в терминале в Linux:
На хосте
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "текст комментария, если хотите" -f id_ArbitraryName
Элементы в {} являются опциями, используйте rsa или dsa и выберите размер бита (чем больше, тем безопаснее)
Затем вам нужно добавить права доступа к файлам Authorized_keys и Author__Cys2.
cat id_ArbitraryName.pub >> авторизованные ключи
cat id_AribtraryName.pub >> authorized_keys2
Затем загрузите файл id_AribtraryName в ящик, из которого вы хотите создать ssh. Если соединительная коробка основана на Unix, может потребоваться файл конфигурации (в putty, кто-то выше это рассмотрел).
На соединительной коробке
В вашем конфигурационном файле - vim ~ / .ssh / config
Хост example.host.com # или имя вашего компьютера
Имя пользователя
IdentityFile ~ / .ssh / id_ArbitraryName
Конфигурационному файлу нужны разрешения 600. Папке SSh нужно 700.
Надеюсь, это поможет, если вы столкнетесь с проблемой конфигурации, которая часто пропускается.