Как я могу настроить вход по 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 без пароля.

  1. Сначала создайте свою пару ключей SSH, выполнив ssh-keygen это создаст id_rsa и id_rsa.pub файл. То pub файл - это то, что хранится на серверах, закрытый ключ (id_rsa) - это то, что остается с вами, и то, как вы идентифицируете себя.
  2. Затем скопируйте открытый ключ на свой сервер с помощью ssh-copy-id user@server замените пользователя вашим удаленным пользователем, а сервер - DNS-именем компьютера или IP-адресом. Он запросит ваш пароль SSH, введите его, и если все завершится успешно, вы сможете получить доступ к компьютеру через ssh user@server без необходимости ввода пароля.

Рекомендации

Введите следующие команды:

  1. ssh-keygen

    Нажмите Enter нажимайте до тех пор, пока не получите подсказку

  2. ssh-copy-id -i root@ip_address

    (Он один раз запросит пароль хост-системы)

  3. 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.


Используемые инструменты:

  1. puttygen puttygen скачать
  2. winscp winscp скачать

Шаги для выполнения:

  1. Создайте пару открытых/закрытых ключей с помощью puttygen.
  2. Загрузите открытый ключ на свой сервер в облаке или удаленном месте.

Как это сделать:

1. Сгенерируйте ключ/пару или используйте существующий закрытый ключ

Если у вас есть закрытый ключ:

Открыть puttygen, нажмите кнопку загрузки и выберите свой закрытый ключ (*.pem) файл.


Если у вас нет закрытого ключа:

  • Открыть puttygen,
  • Выберите нужный тип ключа SSH2 DSA (вы можете использовать RSA или DSA) в Параметры раздел. Важно, чтобы вы оставили поле парольной фразы пустым.
  • Нажмите generate и следуйте инструкциям по созданию пары ключей (открытый/закрытый).

Sample Key Generation pic

(из источника 1, ссылка приведена ниже)

2. Создайте новый файл 'authorized_keys' (с notepad)

Скопируйте данные вашего открытого ключа из раздела "Открытый ключ для вставки в файл OpenSSH authorized_keys" генератора ключей PuTTY и вставьте данные ключа в authorized_keys файл.


Убедитесь, что в этом файле есть только одна строка текста.


3. Загрузите ключ на сервер Linux

  • Откройте WinSCP,
  • Выберите файловый протокол SFTP и войдите в систему, используя свои учетные данные ssh.
  • В случае успеха вы увидите домашнюю структуру каталогов на своем удаленном компьютере.

Загрузите файл authorized_keys в домашний каталог на удаленном компьютере.


4. Установите соответствующие разрешения

Сделай .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 для удаленного входа в систему и удаленного копирования, соответственно, позволяют вам взаимодействовать с удаленным хостом без указания пароля. Для этого необходимо выполнить процедуру аутентификации, подобную описанной ниже. Под клиентом мы подразумеваем компьютер, на котором вы находитесь, а под сервером - компьютер, на который вы хотите войти, не вводя пароль. Этапы процедуры аутентификации следующие:

  1. Запустите ssh-keygen для генерации закрытых и открытых ключей, если это еще не сделано на вашем компьютере. Они хранятся в файлах в $HOME/.ssh.
  2. Добавьте содержимое файла открытого ключа к файлу $HOME/.ssh/authorized_keys или $HOME/.ssh/authorized_keys2 на сервере.

Существует три различных типа протоколов аутентификации. Вы указываете тип при запуске ssh-keygen:

  1. тсс версия протокола 1, RSA1: это выбор по умолчанию и приводит к идентификации файлов (закрытый ключ, должен принимать chmod 0700 чтобы убедиться, что этот файл не доступен для чтения другим пользователям) и личность.паб (открытый ключ).
  2. тсс версия протокола 1, RSA: это получается путем выполнения ssh-keygen -t rsa и результаты в файлах id_rsa (закрытый ключ) и id_rsa.pub (открытый ключ)
  3. тсс версия протокола 1, ассоциация прямых продаж: это получается путем выполнения 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).

Использование ключей RSA1

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"

Использование ключей DSA

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 - это файл, в котором вы храните сгенерированный вами ключ.

Я стараюсь не делать предположений :wink:

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

Используете ли вы openssh? (если это так, то это просто :wink: )

@Rinzwind, зачем мне беспокоиться о получении проприетарной версии, если OpenSSH уже предустановлен?

@Oxwivi: Извините, это должен был быть комментарий к ответу Равиндры, который предназначен для входа в систему root.

Как раз в тот момент, когда поднята голова. Больше нет необходимости заключать пользовательский номер порта и флаг в кавычки. ssh-copy-id -p 1234 Идентификатор пользователя@хост