Вопрос: Как я могу настроить пароль без SSH?


Я хочу, чтобы иметь возможность входа в удаленную систему через ssh без необходимости вводить пароль все время.

  • Как мне настроить его?
  • Требуется ли другая команда для выполнения сеанса без пароля?

223
2018-06-04 17:24


Источник


Вы используете openssh? (если это так легко;)) - Rinzwind
@Rinzwind, Почему я буду беспокоиться о получении проприетарной версии, когда OpenSSH уже предустановлен? - Oxwivi
Я стараюсь не делать заверений;) - Rinzwind
Обратите внимание, что это считается плохой практикой безопасности, и некоторые дистрибутивы отключают ее из коробки. Я не уверен, но возможно, вам нужно включить PermitRootLogin в /etc/ssh/sshd_config чтобы сделать эту работу. - Kevin
@ Кевин, пожалуйста, уточните. Мы говорим о ssh-ing без пароля, что обычно хорошая практика, Вы имеете в виду ssh-ing в корневую оболочку? Это не затрагивает этот вопрос. - Oxwivi


Ответы:


Ответ

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

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-keygen 
Generating 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-desktop
The 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@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to 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 заменяя пользователя удаленным пользователем и сервером именем или IP-адресом компьютера. Он будет запрашивать пароль SSH, ввести его, и если все будет успешно завершено, вы сможете получить доступ к машине через ssh user@server без пароля.

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


229
2018-06-04 17:36



@Oxwivi этот ответ - более правильный способ сделать это, но он кажется длиннее. Все, что вам нужно сделать, это тип ssh-keygen следуйте инструкциям на экране, затем введите ssh-copy-id user@server заменяя пользователя удаленным пользователем и сервером удаленной машиной - Marco Ceppi♦
У меня была эта ошибка: «Агент допустил отказ подписать с помощью ключа». каждый раз при попытке войти в систему после выполнения этой процедуры. Решение состояло в том, чтобы запустить «> ssh-add» на локальном компьютере, и теперь я могу зайти на удаленный компьютер, как ожидалось. - jmbouffard
Стоит упомянуть, что если вам нужно использовать пользовательский порт для @server, вам нужно сделать это с помощью: ssh-copy-id "not-marco@127.0.0.1 -p 1234", - s3m3n
@Rinzwind: Означает ли это, что я не могу аутентифицироваться с неизвестного клиента / машины на моем сервере, если отключить аутентификацию passwd и разрешить только проверку подлинности. Есть ли способ разрешить вход с неизвестного компьютера с помощью закрытого ключа, который был создан для того, чтобы известный / настроенный клиент мог взаимодействовать с сервером? Я имею в виду, является ли этот секретный ключ переносимым и может использоваться для аутентификации на сервере с других компьютеров, в случае чрезвычайных потребностей? - Rajat Gupta
Но сервер по-прежнему просит пароль, - lerner


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

  1. ssh-keygen 

    Нажмите Войти до получения подсказки

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

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

  3. ssh root@ip_address

Теперь вы можете войти в систему без пароля.


30
2018-05-17 08:45





Обычно я делаю так:

ssh-keygen -t rsa

(Когда будет предложено ввести пароль, оставьте поле пустым)

Затем: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(Для этого требуется, чтобы папка .ssh находилась в домашнем каталоге на целевом имени хоста с файлом authorized_keys)

Разумеется, замените имя пользователя на нужное имя пользователя и имя хоста на требуемое имя хоста или IP-адрес

После этого просто SSH к этому ящику, как будто вы привыкли.


21
2018-06-04 18:22



Что насчет touch а также chmod в ответ Ринзвинда? - Oxwivi
Вам нужно будет chmod .ssh/authorized_keys файл до 0600, или это не сработает - Marco Ceppi♦
Это действительно помогло, потому что я не мог заставить ssh-copy-id работать для root на моем сервере. он должен быть корневым в ситуации, когда backuppc (или любой другой демон) нуждается в ssh на другой машине. - Adam


Я обычно использую sshpass для этого установите его с помощью sudo apt-get install sshpass и использовать его так

sshpass -p 'password' ssh your_username@your_server

18
2017-12-06 17:26



Почему бы не использовать клавиши ssh? - enzotib
Это не «почему бы и нет» ситуация, она по-прежнему отлично работает, не добавляя ключей, это просто другой метод, который я бы сказал. - Bruno Pereira
Спасибо за информацию о sshpass, никогда не слышал об этом раньше. - Panther
SSH-ключи являются «правильным» ответом на вопрос, но sshpass это очень полезный взлом в случаях, когда вы не можете изменить метод проверки подлинности на удаленном сервере! - Jacob Krall
Это очень опасно, вы будете хранить в bash_history или какие-либо простые пароли для хостов, с которыми вы подключаетесь. - kappa


[решение специально для пользователей, использующих Windows в SSH в их удаленные машины, включая облачные изображения на Облако AWS а также GCE Cloud]

(Если это сработает для вас, upvote очень ценится. Спасибо за ваше терпение.)

(Отказ от ответственности)

Недавно использовалось это решение для удаленного входа в систему новых развернутых изображений vm на GCE.


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

  1. puttygen [puttygen загрузка]
  2. winscp [winscp download]

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

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

Описание (как это сделать):

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

(у меня есть закрытый ключ)

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


(у меня нет личного ключа)

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

Sample Key Generation pic (из источника 1, ссылка ниже)

2. Создайте новый файл authorized_keys (с помощью блокнота)

Скопируйте данные открытого ключа из «Открытого ключа для вставки в файл OpenSSH authorized_keys» в Generator Generator 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 на удаленную машину без ввода учетных данных каждый раз.

Дальнейшее чтение:

  1. https://opengear.zendesk.com/entries/23216142-Generating-and-uploading-SSH-keys-under-Windows

  2. http://www.beginninglinux.com/home/server-administration/openssh-keys-certificates-authentication-pem-pub-crt

  3. загрузить puttygen

  4. winscp загрузить

9
2017-11-20 09:07





Отключить аутентификацию паролей

Поскольку многие люди с SSH-серверами используют слабые пароли, многие   онлайн-злоумышленники будут искать SSH-сервер, а затем начнут гадать   пароли в случайном порядке. Злоумышленник может попробовать тысячи паролей в   час, и угадать даже самый сильный пароль, которому дано достаточно времени.   Рекомендуемое решение - использовать ключи SSH вместо паролей. Быть как   трудно догадаться, как обычный SSH-ключ, пароль должен содержать   634 случайных букв и цифр. Если вы всегда сможете войти в систему   ваш компьютер с SSH-ключом, вы должны отключить пароль   аутентификации.

Если вы отключите аутентификацию паролей,   подключитесь с компьютеров, которые вы специально одобрили. Это массово   улучшает вашу безопасность, но делает невозможным подключение к   ваш компьютер с компьютера друга без предварительного одобрения ПК или   от вашего собственного ноутбука, когда вы случайно удаляете свой ключ.

Рекомендуется отключить аутентификацию паролей, если у вас нет   конкретная причина не делать этого.

Чтобы отключить аутентификацию паролей, найдите следующую строку в   ваш файл sshd_config:

#PasswordAuthentication yes

замените его строкой, которая выглядит так:

PasswordAuthentication no

После того как вы сохранили файл и перезапустили свой SSH-сервер, вы   не нужно даже запрашивать пароль при входе в систему.

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


7
2018-02-15 01:10



Это самый правильный правильный ответ, но хороший для безопасности! Также отключить регистрацию root еще один хороший - FreeSoftwareServers
Есть ли PasswordAuthentication no затрагивают всех пользователей? Если нет, как отключить его для обычных пользователей, но оставить его неизменным для root, пока я его тестирую? Я действительно не хочу вскрывать его и полностью блокировать. - Adam
Сохраните сеанс ssh, чтобы вы могли его изменить. Вы хотите отключить пароли AND root. Да, вы можете его путать. Не;) - Thufir
Во время ssh у меня есть ошибка Permission denied (publickey). с PasswordAuthentication no, Что мне делать? Я меняю PasswordAuthentication no на другом хозяине? - ParisaN


Если вы создаете общедоступную / уязвимую пару ключей и входите в систему, используя наш вновь созданный открытый ключ, вам не нужно вводить пароль. В зависимости от конфигурации вашего ключа и / или агента ssh вам может потребоваться защитить ваш ключ парольной фразой.

Вот один из многих короткий способдля вас. Для безопасности этого метода крайне важно, чтобы сгенерированный закрытый ключ оставался приватным! Вы никогда не должны делиться им с кем-либо или разрешать доступ к нему в любом качестве.

Эта команда генерирует достаточно сильный ключ в ~/.ssh/:

ssh-keygen -b 4096

В ~/.ssh/ вы найдете свой открытый ключ как id_rsa.pub, Его содержимое должно быть добавлено к вашим серверам authorized_keys файл путем переноса через переносимый носитель (ручное устройство) или путем короткого включения проверки подлинности на сервере на сервере, затем используя ssh-copy-id ~/.ssh/id_rsa.pub username@server а затем снова отключить его.

Если вы решили защитить свой ключ парольной фразой (на первом шаге), вы можете использовать ssh-agent или брандмауэр Ubuntu для обеспечения безопасности этого локального локального доступа, поэтому вам не нужно вводить его все время.


4
2018-06-04 17:32





Удаленный вход / копирование без указания пароля

Приложения ssh а также scp для удаленного входа и удаленной копии, соответственно, позволяют вам общаться с удаленным хостом без указания пароля. Это требует, чтобы вы выполняли процедуру аутентификации, подобную процедуре, описанной ниже. Под клиентом мы подразумеваем машину, на которой вы сидите, и по серверу мы имеем в виду машину, на которую вы хотите войти, не указав пароль. Шаги процедуры аутентификации:

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

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

  1. SSH протокол версии 1, RSA1: это выбор по умолчанию и приводит к идентичности файлов (закрытый ключ, должен принимать chmod 0700 чтобы этот файл не читался для других) и identity.pub (открытый ключ).
  2. SSH протокол версии 1, RSA: это получается при запуске ssh-keygen -t rsa и приводит к файлам id_rsa (закрытый ключ) и id_rsa.pub (открытый ключ)
  3. SSH протокол версии 1, DSA: это получается при запуске ssh-keygen -t dsa и приводит к файлам id_dsa (закрытый ключ) и id_dsa.pub (открытый ключ)

При запуске ssh-keygen вы можете полагаться на ответы по умолчанию (подразумевая, что вы не вводите кодовую фразу). Это делает всю настройку простой, но небезопасной.

Вы можете указать тип ключей, которые будут использоваться опцией SSH; ssh -1 использует RSA1 (протокол версии 1), тогда как ssh -2 сил SSH пытаться RSA или DSA только для ключей (протокол версии 2). В приведенных ниже примерах мы генерируем и устанавливаем RSA1 а также DSA на удаленном хосте, так что у вас больше гибкости. Вы можете создать файл конфигурации в своем .sshкаталог с линией

Protocol 1,2

Это делает SSH попробуйте RSA1 (протокол версии 1) перед RSA / DSA (протокол версии 2).

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

remote=user@remotehost   # fill in correct user and remotehost names
cd $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}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

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

remote=user@remotehost   # fill in correct user and remotehost names
cd $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}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

Это все, что вам нужно сделать, если вы не использовали кодовую фразу при создании ключей. Вы можете проверить соединение, запустив ssh $ remote и посмотреть, можете ли вы войти в систему, не указывая пароль (возможно, вам придется использовать -1 или -2 как варианты SSH). Процедуру можно, конечно, повторить для любой машины, на которую вы хотите войти.

Если вы использовали кодовую фразу, вам нужно будет запустить программу ssh-agent для запуска специальной оболочки, за которой следует ssh-add зарегистрировать ключ / ключевая фраза сочетание с sshd, Дополнительную информацию см. На страницах руководства для этих программ.

Скрипт для автоматизации парольных подключений: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$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 dsa
else
  # 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
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# 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; echo
echo "try an ssh $remote"

скопировано из: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


3
2017-09-14 08:27