Я хочу иметь возможность входить в систему на удаленном компьютере через ssh без необходимости постоянно вводить пароль.
- Как мне его настроить?
- Требуется ли другая команда для выполнения сеанса без пароля?
Я хочу иметь возможность входить в систему на удаленном компьютере через ssh без необходимости постоянно вводить пароль.
Выполните эту команду (если у вас уже есть SSH-ключ, вы можете пропустить этот шаг):
ssh-keygen
Затем вам нужно будет скопировать новый ключ на свой сервер:
ssh-copy-id user@host## or if your server uses custom port no:ssh-copy-id "user@host -p 1234"
После копирования ключа войдите в компьютер по ssh в обычном режиме:
ssh user@host
Теперь вы можете войти в систему без ввода пароля с конкретного компьютера, на котором вы выполняли команды.
not-marco@rinzwind-desktop:~$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):Created directory '/home/not-marco/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /home/not-marco/.ssh/id_rsa.Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.The key fingerprint is:b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktopThe key's randomart image is:+--[ RSA 2048]----+|.o= . oo. ||*B.+ . . ||*=o . o . || = . = ||. o S ||E. || o || . || |+-----------------+not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@servernot-marco@server's password:Now try logging into the machine, with "ssh 'not-marco@server'", and check in: ~/.ssh/authorized_keysto make sure we haven't added extra keys that you weren't expecting.
Это предполагает, что вы уже можете успешно подключиться к своему серверу через SSH.
Вам нужно будет сгенерировать пару ключей SSH, которая позволит вам идентифицировать себя как самого себя без использования пароля. При желании вы можете выбрать защиту ключей паролем, но это поле можно оставить пустым, что позволит получить доступ по SSH без пароля.
ssh-keygen
это создаст id_rsa
и id_rsa.pub
файл. То pub
файл - это то, что хранится на серверах, закрытый ключ (id_rsa
) - это то, что остается с вами, и то, как вы идентифицируете себя.ssh-copy-id user@server
замените пользователя вашим удаленным пользователем, а сервер - DNS-именем компьютера или IP-адресом. Он запросит ваш пароль SSH, введите его, и если все завершится успешно, вы сможете получить доступ к компьютеру через ssh user@server
без необходимости ввода пароля.Введите следующие команды:
ssh-keygen
Нажмите Enter нажимайте до тех пор, пока не получите подсказку
ssh-copy-id -i root@ip_address
(Он один раз запросит пароль хост-системы)
ssh root@ip_address
Теперь вы должны иметь возможность войти в систему без какого-либо пароля.
Обычно я делаю это следующим образом:
ssh-keygen -t rsa
(При запросе пароля оставьте его пустым)
Затем:cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(Для этого требуется, чтобы папка .ssh находилась в домашнем каталоге на целевом имени хоста с файлом authorized_keys в нем)
Конечно, замените имя пользователя на желаемое имя пользователя, а имя хоста - на желаемое имя хоста или IP-адрес
После этого просто подключитесь к этому ящику по SSH, как вы привыкли.
Обычно я использую sshpass
для этого установите его с помощью sudo apt-get install sshpass
и используйте его вот так
sshpass -p 'password' ssh your_username@your_server
Отключить Проверку подлинности по Паролю
Поскольку многие люди с SSH-серверами используют слабые пароли, многие онлайн-злоумышленники будут искать SSH-сервер, а затем начнут угадывать пароли наугад. Злоумышленник может перепробовать тысячи паролей за час и угадать даже самый надежный пароль, если у него будет достаточно времени. Рекомендуемое решение - использовать SSH-ключи вместо паролей. Чтобы пароль было так же трудно угадать, как обычный SSH-ключ, он должен содержать 634 случайных буквы и цифры. Если вы всегда сможете войти на свой компьютер с помощью SSH-ключа, вам следует полностью отключить аутентификацию по паролю.
Если вы отключите проверку подлинности по паролю, подключение будет возможно только с компьютеров, которые вы специально одобрили. Это значительно повышает вашу безопасность, но делает невозможным подключение к вашему собственному компьютеру с КОМПЬЮТЕРА друга без предварительного одобрения компьютера или с вашего собственного ноутбука, когда вы случайно удаляете свой ключ.
Рекомендуется отключить проверку подлинности по паролю, если у вас нет особых причин этого не делать.
Чтобы отключить проверку подлинности по паролю, найдите следующую строку в вашем файле sshd_config:
#PasswordAuthentication yes
замените его строкой, которая выглядит следующим образом:
PasswordAuthentication no
После того, как вы сохранили файл и перезапустили свой SSH-сервер, вас даже не должны спрашивать пароль при входе в систему.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
Это решение предназначено специально для пользователей, использующих Окна к тсс на их удаленные компьютеры, включая облачные изображения на Облако AWS и Облако GCE
Недавно использовал это решение для удаленного входа в новые развернутые образы виртуальных машин на GCE.
puttygen
puttygen скачать
winscp
winscp скачать
Если у вас есть закрытый ключ:
Открыть puttygen
, нажмите кнопку загрузки и выберите свой закрытый ключ (*.pem
) файл.
Если у вас нет закрытого ключа:
puttygen
,(из источника 1, ссылка приведена ниже)
notepad
)Скопируйте данные вашего открытого ключа из раздела "Открытый ключ для вставки в файл OpenSSH authorized_keys" генератора ключей PuTTY и вставьте данные ключа в authorized_keys
файл.
Убедитесь, что в этом файле есть только одна строка текста.
Загрузите файл authorized_keys в домашний каталог на удаленном компьютере.
Сделай .ssh
каталог (если он не существует)
Копировать authorized_keys
файл для .ssh
каталог.
(это заменит все существующие authorized_keys
файл, примите это к сведению).
Если файл существует, просто добавьте содержимое этого файла в существующий файл.
Выполняйте команды для установки разрешений:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Теперь Вы сможете ssh
на удаленную машину без ввода учетных данных каждый раз.
Если вы создадите пару ключей public/pricate и войдете в систему, используя наш недавно созданный открытый ключ, вам не нужно будет вводить свой пароль. В зависимости от конфигурации вашего набора ключей и /или ssh-агента вам может потребоваться защитить свой ключ с помощью парольной фразы.
Вот один из многих краткое руководство поэто для тебя. Для безопасности этого метода крайне важно, чтобы сгенерированный закрытый ключ оставался закрытым! Вы никогда не должны делиться им с кем-либо или разрешать доступ к нему в любом качестве.
Эта команда генерирует достаточно надежный ключ в ~/.ssh/
:
ssh-keygen -b 4096
В ~/.ssh/
вы найдете свой открытый ключ следующим образом id_rsa.pub
. Его содержимое должно быть добавлено к вашим серверам authorized_keys
файл, передав его на переносной носитель (флешку) или включив на короткое время аутентификацию по паролю на сервере, а затем используя ssh-copy-id ~/.ssh/id_rsa.pub username@server
а затем снова отключите его.
Если вы решили защитить свой ключ с помощью парольной фразы (на первом шаге), вы можете использовать ssh-agent
или брелок для ключей Ubuntu, чтобы защитить этот pharse локально, чтобы вам не приходилось вводить его все время.
Чтобы внести некоторые дополнения:
Mac по умолчанию не имеет ssh-copy-id
, вам придется установить его самостоятельно:
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-idchmod +x /usr/local/bin/ssh-copy-id
узнайте больше здесь: https://github.com/beautifulcode/ssh-copy-id-for-OSX
если вы выполнили переадресацию портов, команда должна выглядеть следующим образом:
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
обратите внимание, что кавычки необходимы.
Приложения ssh
и scp
для удаленного входа в систему и удаленного копирования, соответственно, позволяют вам взаимодействовать с удаленным хостом без указания пароля. Для этого необходимо выполнить процедуру аутентификации, подобную описанной ниже. Под клиентом мы подразумеваем компьютер, на котором вы находитесь, а под сервером - компьютер, на который вы хотите войти, не вводя пароль. Этапы процедуры аутентификации следующие:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
или $HOME/.ssh/authorized_keys2
на сервере.Существует три различных типа протоколов аутентификации. Вы указываете тип при запуске ssh-keygen:
chmod 0700
чтобы убедиться, что этот файл не доступен для чтения другим пользователям) и личность.паб (открытый ключ).ssh-keygen -t rsa
и результаты в файлах id_rsa
(закрытый ключ) и id_rsa.pub
(открытый ключ)ssh-keygen -t dsa
и результаты в файлах id_dsa
(закрытый ключ) и id_dsa.pub
(открытый ключ)При запуске ssh-keygen вы можете полагаться на ответы по умолчанию (подразумевающие, что вы не вводите пароль). Это делает всю настройку простой, но в то же время небезопасной.
Вы можете указать тип ключей, которые будут использоваться с помощью опции для тсс; ssh -1
сил, использующих RSA1 ключи (версия протокола 1), тогда как ssh -2
силы тсс пытаться RSA или ассоциация прямых продаж только ключи (версия протокола 2). В приведенных ниже примерах мы создаем и устанавливаем RSA1 и ассоциация прямых продаж ключи на удаленном хосте, чтобы у вас было больше гибкости. Вы можете создать конфигурационный файл в вашем .ssh
каталог со строкой
Protocol 1,2
Это делает тсс попробуйте RSA1 (версия протокола 1) подключение перед RSA/DSA (версия протокола 2).
remote=user@remotehost # fill in correct user and remotehost namescd $HOME/.ssh# create .ssh on remote host if it is non-existing:ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' # copy RSA1 key: scp identity.pub ${remote}:.sshssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost namescd $HOME/.ssh# create .ssh on remote host if it is non-existing:ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' # copy DSA key: scp id_dsa.pub ${remote}:.sshssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
Это все, что вам нужно сделать, если вы не использовали кодовую фразу при генерации ключей. Вы можете проверить соединение, запустив ssh $remote, и посмотреть, сможете ли вы войти в систему, не вводя пароль (возможно, вам придется использовать -1
или -2
в качестве вариантов для тсс). Конечно, эту процедуру можно повторить для любого компьютера, на который вы хотите войти.
Если вы действительно использовали кодовую фразу, вам придется запустить программу ssh-agent
для запуска специальной оболочки, за которой следует ssh-add
чтобы зарегистрировать свой ключ/кодовая фраза комбинация с sshd
. Дополнительные сведения см. на справочных страницах этих программ.
ssh-no-password.sh
#!/bin/sh# create ssh connections without giving a passwordif [ $# -lt 1 ]; then echo Usage: $0 username@remotehost exitfiremote="$1" # 1st command-line argument is the user@remotehost addressthis=$HOST # name of client host# first check if we need to run ssh-keygen for generating# $HOME/.ssh with public and private keys:if [ ! -d $HOME/.ssh ]; then echo "just type RETURN for each question:" # no passphrase - unsecure!! # generate RSA1, RSA and DSA keys: echo; echo; echo ssh-keygen echo; echo; echo ssh-keygen -t rsa echo; echo; echo ssh-keygen -t dsaelse # we have $HOME/.ssh, but check that we have all types of # keys (RSA1, RSA, DSA): if [ ! -f $HOME/.ssh/identity ]; then # generate RSA1 keys: echo "just type RETURN for each question:" # no passphrase - unsecure!! ssh-keygen fi if [ ! -f $HOME/.ssh/id_rsa ]; then # generate RSA keys: echo "just type RETURN for each question:" # no passphrase - unsecure!! ssh-keygen -t rsa fi if [ ! -f $HOME/.ssh/id_rsa ]; then # generate DSA keys: echo "just type RETURN for each question:" # no passphrase - unsecure!! ssh-keygen -t dsa fificd $HOME/.sshif [ ! -f config ]; then # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys) echo "Protocol 1,2" > configfi# copy public keys (all three types) to the destination host:echo; echo; echo# create .ssh on remote host if it's not there:ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' # copy RSA1 key: scp identity.pub ${remote}:.ssh/${this}_rsa1.pub# copy RSA key:#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub# copy DSA key:scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub# make authorized_keys(2) files on remote host:echo; echo; echo# this one copies all three keys:#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"# this one copies RSA1 and DSA keys:ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"echo; echo; echoecho "try an ssh $remote"
скопировано с: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
Я хотел бы добавить ответ для тех, кто может обнаружить, что им следует ввести пароль, даже если они прочитали все ответы здесь, потому что вы установили IdentitiesOnly как yes. И ответ здесь может сэкономить вам много времени на управление несколькими ключами, являющимися ключами для git или сервера.
После того, как я сгенерировал ключ и скопировал его на сервер:
ssh-keygen # change the file to /home/yourname/.ssh/somethingssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
Я обнаружил, что это не сработало.
Затем я пошел проверить ~/.ssh/config
файл на клиенте, я видел это внизу:
Host *IdentitiesOnly yes
Затем я добавляю это выше:
Host somenameHostName 192.168.20.160User lernerIdentityFile ~/.ssh/something
Я могу просто войти в систему, введя ssh somename
.
Затем вы можете добавить несколько ssh-ключей, используя ваши любимые имена, и вам нужно только добавить настройки, подобные приведенным выше четырем строкам, в конфигурационный файл.
Хост - это имя, которое вы хотели бы ввести при последующем подключении к серверу; имя хоста - это IP-адрес сервера; Пользователь - это имя пользователя, с которым вы входите на сервер; а identityfile - это файл, в котором вы храните сгенерированный вами ключ.
Я стараюсь не делать предположений
@Кевин, пожалуйста, прояснись. Мы говорим о подключении по ssh без пароля, что, как правило, является хорошей практикой. Вы имеете в виду ssh-вход в корневую оболочку? Это не рассматривается в данном вопросе.
Используете ли вы openssh? (если это так, то это просто )
@Rinzwind, зачем мне беспокоиться о получении проприетарной версии, если OpenSSH уже предустановлен?
@Oxwivi: Извините, это должен был быть комментарий к ответу Равиндры, который предназначен для входа в систему root.
Как раз в тот момент, когда поднята голова. Больше нет необходимости заключать пользовательский номер порта и флаг в кавычки. ssh-copy-id -p 1234 Идентификатор пользователя@хост