Как я могу настроить SSH-вход без пароля?
Я хочу, чтобы иметь возможность войти в систему с помощью SSH без необходимости все время вводить пароль.
- Как мне это настроить?
- Требуется ли другая команда для выполнения сеанса без пароля?
10 ответов
Ответ
Выполните следующие команды:
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 без пароля.
- Сначала создайте вашу пару ключей 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 находилась в домашнем каталоге на целевом имени хоста, с файлом авторизованных ключей).
Конечно, замените имя пользователя на желаемое имя пользователя, а имя хоста на желаемое имя хоста или 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-сервер, вам даже не нужно запрашивать пароль при входе в систему.
Это решение специально для пользователей, использующих Windows для подключения к своим удаленным компьютерам, включая облачные образы в AWS Cloud и GCE Cloud.
отказ
Недавно использовал это решение для удаленного входа в систему новых развернутых образов VM на GCE.
Используемые инструменты:
puttygen
замазка скачатьwinscp
Winscp скачать
Шаги для выполнения:
- Создайте пару открытый / закрытый ключ, используя puttygen.
- Загрузите открытый ключ на ваш сервер в облаке или в удаленном месте.
Как это сделать:
1. Сгенерируйте ключ / пару или используйте существующий закрытый ключ
Если у вас есть личный ключ:
открыто puttygen
нажмите кнопку загрузки и выберите свой закрытый ключ (*.pem
) файл.
Если у вас нет личного ключа:
- открыто
puttygen
, - Выберите нужный тип ключа SSH2 DSA (вы можете использовать RSA или DSA) в разделе " Параметры ". Важно, чтобы вы оставили поле пароля незаполненным.
- Нажмите " Генерировать" и следуйте инструкциям, чтобы сгенерировать (открытый / закрытый) ключ.
(из источника 1, ссылка приведена ниже)
2. Создайте новый файл authorized_keys (с помощью notepad
)
Скопируйте данные вашего открытого ключа из раздела "Открытый ключ для вставки в OpenSSH файл авторизованного ключа" в Генераторе ключей PuTTY и вставьте данные ключа в authorized_keys
файл.
Убедитесь, что в этом файле только одна строка текста.
3. Загрузите ключ на сервер Linux
- Откройте WinSCP,
- Выберите протокол файла SFTP и войдите под своими учетными данными ssh.
- В случае успеха вы видите структуру домашнего каталога на вашем удаленном компьютере.
Загрузите файл author_keys в домашнюю директорию на удаленном компьютере.
4. Установите правильные разрешения
Делать .ssh
каталог (если не существует)
копия authorized_keys
подать в .ssh
каталог.
(это заменит любой существующий authorized_keys
файл, обратите внимание на это).
Если файл существует, просто добавьте содержимое этого файла в существующий файл.
Запустите команды для установки разрешений:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Теперь вы сможете ssh
в удаленную машину без ввода учетных данных каждый раз.
Дальнейшее чтение:
Если вы создаете открытую пару ключей и входите в систему с помощью нашего вновь созданного открытого ключа, вам не нужно будет вводить пароль. В зависимости от конфигурации вашего связки ключей и / или агента ssh вам может потребоваться защитить ваш ключ парольной фразой.
Вот один из многих коротких инструкций для вас. Для безопасности этого метода крайне важно, чтобы сгенерированный закрытый ключ оставался закрытым! Вы никогда не должны делиться этим с кем-либо или разрешать доступ к нему в любом качестве.
Эта команда генерирует достаточно сильный ключ в ~/.ssh/
:
ssh-keygen -b 4096
В ~/.ssh/
Вы найдете свой открытый ключ как id_rsa.pub
, Его содержимое должно быть добавлено к вашим серверам authorized_keys
файл путем транспортировки через переносной носитель (флеш-накопитель) или путем краткого включения аутентификации по паролю на сервере, а затем с помощью ssh-copy-id ~/.ssh/id_rsa.pub username@server
а затем отключить его снова.
Если вы решили защитить свой ключ парольной фразой (на первом шаге), вы можете использовать ssh-agent
или связка ключей Ubuntu для локальной защиты этого выражения, чтобы вам не приходилось вводить его все время.
Чтобы сделать некоторые дополнения:
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-id chmod +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"
обратите внимание, что цитаты необходимы.
Я хотел бы добавить ответ для тех, кто может найти, что должен ввести пароль, даже если они прочитали все ответы здесь, потому что вы установили IdentitiesOnly как да. И ответ здесь может сэкономить вам много времени на управление несколькими ключами, будь то ключи для git или сервера.
После того, как я сгенерировал ключ и скопировал его на сервер:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
Я обнаружил, что это не сработало.
Затем я пошел, чтобы проверить ~/.ssh/config
файл на клиенте, я увидел это внизу:
Host *
IdentitiesOnly yes
Тогда я добавлю это выше:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
Я могу просто войти, введя ssh somename
,
Затем вы можете добавить несколько ключей SSH, используя ваши любимые имена, и вам нужно всего лишь добавить настройки, такие как четыре строки в файле конфигурации.
Хост - это имя, которое вы хотели бы ввести при последующем подключении к серверу; HostName - это IP-адрес сервера; Пользователь - это имя пользователя, которое вы регистрируете на сервере; а файл идентификации - это файл, в котором вы храните сгенерированный вами ключ.
Удаленный вход / копирование без ввода пароля
Приложения ssh
а также scp
для удаленного входа и удаленного копирования, соответственно, разрешается связь с удаленным хостом без ввода пароля. Это требует, чтобы вы следовали процедуре аутентификации, подобной описанной ниже. Под клиентом мы подразумеваем машину, на которой вы сидите, а под сервером - машину, на которую вы хотите войти без ввода пароля. Шаги процедуры аутентификации:
- Запустите ssh-keygen для генерации закрытых и открытых ключей, если это еще не сделано на вашем компьютере. Они хранятся в файлах в
$HOME/.ssh
, - Добавить содержимое файла открытого ключа в файл
$HOME/.ssh/authorized_keys
или же$HOME/.ssh/authorized_keys2
на сервере.
Существует три разных типа протоколов аутентификации. Вы указываете тип при запуске ssh-keygen:
- Протокол SSH версии 1, RSA1: это выбор по умолчанию, который приводит к идентификации файлов (закрытый ключ должен
chmod 0700
чтобы этот файл не читался другими) и identity.pub (открытый ключ). - Протокол SSH версии 1, RSA: это получается при запуске
ssh-keygen -t rsa
и результаты в файлахid_rsa
(закрытый ключ) иid_rsa.pub
(открытый ключ) - Протокол 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
, Смотрите man-страницы для этих программ для получения дополнительной информации.
Скрипт для автоматизации беспарольных соединений: 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