как настроить ssh, чтобы не вводить пароль?

<p>как настроить ssh, чтобы мне не приходилось вводить пароль при подключении к хосту?</p>

<h2>сгенерируйте ключ ssh (если у вас его нет)</h2><p>если вы используете gnome, приложение<strong> seahorse </strong>(«пароли и ключи шифрования») может сделать это за вас: <em>файл</em> -> <em>новое</em> -> <em>безопасный ключ оболочки</em>.</p><p>если вы предпочитаете терминал, запустите <code>ssh-keygen -t <i><type></i></code> для генерации пары ключей. допустимые типы пар ключей:</p><ul> <li>rsa: по умолчанию</li> <li>dsa: более или менее эквивалентный, за исключением ограниченного 1024-битными ключами</li> <li>ecdsa: та же безопасность с меньшими ключами, но относительно новая и немного редкая в программном обеспечении ssh.</li> <li>ed25519: высокая безопасность (более устойчива к атакам по побочным каналам и слабым генераторам случайных чисел). очень быстрая генерация подписи. очень новый доступно только в <a href="http://www.openssh.com/txt/release-6.5">openssh> = 6.5</a> .</li> </ul><p>программа запросит у вас <a href="http://xkcd.com/936/">пароль</a> и место, где сохранить новый ключ. рекомендуется использовать предложенный путь по умолчанию, потому что все другие инструменты будут искать его там.</p><h2>загрузите открытый ключ на удаленный сервер</h2><p>опять же,<strong> seahorse </strong>часто может сделать это за вас - в <em>мои персональные ключи</em> щелкните правой кнопкой мыши по своему ключу ssh и выберите <em>настроить ключ для защищенной оболочки</em>.</p><p>или <code>ssh-copy-id -i ~/.ssh/id\_rsa.pub remote-user@remote-host</code> в терминале.</p><p>или полностью вручную пошагово:</p><ol> <li>создайте каталог (если он еще не существует) с именем <code>.ssh</code> в домашнем каталоге удаленного пользователя на удаленном хосте.</li> <li>в этом каталоге создайте файл с именем <code>authorized\_keys</code> (если он еще не существует).</li> <li>если ваш удаленный <code>umask</code> более либерален, чем обычно, сделайте файл не доступным для записи группой: <code>chmod go-w ~/.ssh ~/.ssh/authorized\_keys</code>.</li> <li>наконец, каким-то образом скопируйте (добавьте) содержимое вашего локального <em>открытого ключа</em> (<code>~/.ssh/id\_rsa.pub</code>) в удаленный файл <code>~/.ssh/authorized\_keys</code>.</li> </ol><h2>загрузите ключ в агент ssh</h2><p>если вы загрузите свой закрытый ключ в ssh <em>agent</em>, он сохранит расшифрованный ключ в памяти. мы хотим, чтобы этот пароль не вводился повторно всякий раз, когда мы выполняем shell на сервере.</p><p>во-первых, агент должен быть запущен, или путь запущенного коммуникационного сокета должен быть загружен в переменную. запуск<strong> ssh-agent </strong>на терминале сгенерирует команды для назначения и установки переменных агента. эти команды могут быть сохранены в файл для использования в другом терминале. кроме того, можно выполнить эти команды и забыть о повторном использовании того же агента в другом терминале. например: <code>eval $(ssh-agent).загрузка ключа - это простое выполнение ssh-add и присвоение ему парольной фразы.если вы используете gnome,<strong> gnome-keyring-daemon </strong>обычно предоставляет те же функциональные возможности агента ssh, что и ssh-agent, поэтому вам не нужно ничего запускать. gnome автоматически загрузит и разблокирует ключ при входе в систему.оболочка на удаленный сервер без пароляесли все было сделано правильно, использование ssh user@server не будет запрашивать у вас пароль. если что-то не так с агентом, а не с ключом, вам будет предложено ввести пароль для пароля, а не пароль для учетной записи пользователя.все, что использует ssh для связи, будет работать без ввода пароля учетной записи пользователя, когда в агент загружен правильный ключ. такие программы, как<strong> scp </strong>,<strong> sftp </strong>и<strong> rsync </strong>, используют это.заметки: вам нужен только ключ 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 '# или этот  переменные агента сохранения для повторного использования <a href="https://github.com/tox2ik/agent-ssh/blob/master/.agent-ssh">(подробный пример)  ssh-agent> ~/.ssh/кросс-терминальный агент . ~/.ssh/кросс-терминал агента  

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

это можно сделать и в <a href="http://en.wikipedia.org/wiki/putty">putty на windows.как только вы настроите пару открытый/закрытый ключ (как показывают другие ответы), запустите puttygen. там загрузите существующий закрытый ключ, который вы уже настроили, а затем сохраните его как закрытый ключ putty (ppk).затем в putty просто нажмите на сохраненную сессию, в которую вы хотите выполнить автоматический вход, и нажмите «загрузить». отсюда перейдите в connection -> data на левой панели и в поле «auto-login username» введите имя пользователя для этого удаленного сервера:<img src="https://i.stack.imgur.com/lbcml.png" alt="putty username entry">после этого перейдите в connection -> ssh -> auth и найдите ppk, который вы сделали в puttygen:<img src="https://i.stack.imgur.com/cissx.png" alt="putty private key entry">затем вернитесь на страницу сеанса и сохраните сеанс, который вы загрузили ранее.

из очень похожего вопроса на <a href="https://serverfault.com/questions/2429/how-do-you-setup-ssh-to-authenticate-using-keys-instead-of-a-username-password/2521#2521">serverfault я бы порекомендовал использовать <a href="http://linux.die.net/man/1/ssh-copy-id">ssh-copy-id , который выполняет все шаги, связанные с настройкой ключей аутентификации для вас:<blockquote> ssh-copy-id - это скрипт, который использует ssh для входа на удаленный компьютер (предположительно, с использованием пароля для входа в систему, поэтому аутентификация по паролю должна быть включена, если вы не сделали несколько умных попыток использовать несколько идентификаторов) он также изменяет права доступа к домашнему файлу удаленного пользователя, ~/.ssh и ~/.ssh/authorized_keys, чтобы удалить возможность записи группы (в противном случае вы не сможете войти в систему, если в удаленной конфигурации sshd установлены strictmodes). если задана опция -i, то используется файл идентификации (по умолчанию ~/.ssh/identity.pub), независимо от того, есть ли какие-либо ключи в вашем ssh-agent. </blockquote>все, что вам нужно сделать, это просто:ssh-copy-id user@host введите пароль один раз, и все готово!

помимо всего, что уже было сказано о том, как установить ssh-ключи, я рекомендую <a href="http://www.gentoo.org/proj/en/keychain/">keychain как ssh-agent консольный интерфейс, который позволяет обрабатывать только один для системного процесса, а не для входа в систему.я знаю, что уже есть инструменты 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 </code></pre>

<p><strong> putty </strong>имеет параметр <a href="http://the.earth.li/~sgtatham/putty/latest/htmldoc/chapter3.html#using-cmdline-pw"><code>-pw</code></a> , который позволяет вам создать ярлык на рабочем столе следующим образом:</p><pre><code>"c:\program files\putty\putty.exe" -ssh user@192.168.2.2 -pw your\_password </code></pre>

<p>я написал этот очень очень короткий урок после того, как действительно действительно разочаровался в действительно действительно длинных уроках, потому что на самом деле это так просто :)</p><pre><code>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 </code></pre>

<p> <a href="http://linuxproblem.org/art\_9.html">http://linuxproblem.org/art\_9.html</a> </p><blockquote> <p><strong> ваша цель </strong></p> <p>вы хотите использовать linux и openssh для автоматизации ваших задач. поэтому вам необходим автоматический вход с хоста a/пользователя a на хост b/пользователя b. вы не хотите вводить какие-либо пароли, потому что вы хотите вызвать ssh из сценария shell.</p> </blockquote>

<ol> <li>на подключающемся хосте запустите <code>ssh-keygen</code>. (если он говорит вам, что вы должны указать тип, выполните <code>ssh-keygen -t rsa</code>.) когда он попросит вас указать местоположение файла, выберите значение по умолчанию. когда вас попросят ввести фразу-пароль, нажмите enter, чтобы не ввести фразу-пароль.</li> <li><code>cat ~/.ssh/id\_rsa.pub</code> (или каким-либо другим местоположением файла по умолчанию в <code>ssh-keygen</code>, хотя вам понадобится установить<em> действительно </em>old <code>ssh</code>, чтобы он отличался); скопируйте вывод в буфер обмена.</li> <li>войдите в систему, как правило, на хост назначения как учетную запись, к которой вы хотите подключиться. отредактируйте файл <code>~/.ssh/authorized\_keys</code> (если <code>~/.ssh</code> не существует, <code>slogin</code> куда-то; это простой и легкий способ создать его с нужными разрешениями). вставьте ваш буфер обмена (содержащий <code>id\_rsa.pub</code> от другого хоста) в этот файл.</li> </ol>

<p>если вы хотите сделать все это в терминале в linux:</p><p><strong> на хосте </strong></p><blockquote> <p>cd ~/.ssh /</p> <p>ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -c "текст комментария, если хотите" -f id\_arbitraryname</p> </blockquote><p><em> элементы в {} являются опциями, используйте rsa или dsa и выберите размер в битах (чем больше, тем безопаснее) </em></p><p>затем вам нужно добавить права доступа к файлам authorized\_keys и author\_\_cys2.</p><blockquote> <p>cat id\_arbitraryname.pub >> авторизованные ключи</p> <p>cat id\_aribtraryname.pub >> authorized\_keys2</p> </blockquote><p>затем загрузите файл id\_aribtraryname в ящик, из которого вы хотите создать ssh. если соединительная коробка основана на unix, может потребоваться файл конфигурации (в putty, кто-то из вышеперечисленных говорил об этом).</p><p><strong> на соединительной коробке </strong></p><p>в вашем конфигурационном файле - vim ~/.ssh/config</p><blockquote> <p>host example.host.com # или имя вашего компьютера</p> <p>имя пользователя</p> <p>identityfile ~/.ssh/id\_arbitraryname</p> </blockquote><p>конфигурационному файлу нужны разрешения 600. папке ssh нужно 700.</p><p>надеюсь, это поможет, если вы столкнетесь с проблемой конфигурации, которая часто пропускается.</p>