Я хочу, чтобы иметь возможность войти в систему с помощью 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-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-keygen
это создаст id_rsa
и id_rsa.pub
файл. pub
Файл , что происходит на серверах, закрытый ключ ( id_rsa
) является то , что остается с вами и как вы отождествляете себя.ssh-copy-id user@server
заменив пользователя удаленным пользователем, а на сервере - DNS-имя или IP-адрес компьютера. Он запросит ваш пароль SSH, введите его, и, если все будет успешно завершено, вы сможете получить доступ к компьютеру ssh user@server
без пароля.ssh-keygen
следуя инструкциям на экране, а затем набрать ssh-copy-id user@server
замену пользователя на удаленного пользователя и сервер на удаленном компьютере
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
Я обычно делаю это следующим образом:
ssh-keygen -t rsa
(При запросе пароля оставьте его пустым)
Затем:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(Для этого требуется, чтобы папка .ssh находилась в домашнем каталоге на целевом имени хоста, с файлом авторизованных ключей).
Конечно, замените имя пользователя на желаемое имя пользователя, а имя хоста на желаемое имя хоста или IP-адрес
После этого просто SSH к этой коробке, как вы привыкли.
touch
и chmod
в ответе Ринзвинда?
.ssh/authorized_keys
будет изменить файл до 0600, иначе это не сработает
Я обычно использую sshpass
для этого, установить его sudo apt-get install sshpass
и использовать как это
sshpass -p 'password' ssh your_username@your_server
sshpass
очень полезны в тех случаях, когда вы не можете изменить метод аутентификации на удаленном сервере!
Отключить аутентификацию по паролю
Поскольку многие люди с SSH-серверами используют слабые пароли, многие злоумышленники в Интернете будут искать SSH-сервер, а затем начнут угадывать пароли наугад. Злоумышленник может испробовать тысячи паролей за час и угадать даже самый надежный пароль при наличии достаточного времени. Рекомендуемое решение - использовать ключи SSH вместо паролей. Чтобы было так же трудно угадать, как обычный SSH-ключ, пароль должен содержать 634 случайных буквы и цифры. Если вы всегда сможете войти на свой компьютер с ключом SSH, вам следует вообще отключить аутентификацию по паролю.
Если вы отключите аутентификацию по паролю, подключение будет возможно только с компьютеров, которые вы специально одобрили. Это значительно повышает вашу безопасность, но делает невозможным подключение к вашему компьютеру с компьютера друга без предварительного одобрения ПК или с вашего ноутбука, когда вы случайно удалили ключ.
Рекомендуется отключить аутентификацию по паролю, если у вас нет особых причин не делать этого.
Чтобы отключить аутентификацию по паролю, найдите следующую строку в файле sshd_config:
#PasswordAuthentication yes
замените его строкой, которая выглядит следующим образом:
PasswordAuthentication no
После того, как вы сохранили файл и перезапустили свой SSH-сервер, вам даже не нужно запрашивать пароль при входе в систему.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
на всех пользователей? Если нет, то как отключить его для обычных пользователей, но оставить его неизменным для root, пока я его тестирую? Я на самом деле не хочу, чтобы foobar это и заблокировать себя полностью.
Permission denied (publickey).
с PasswordAuthentication no
. Что мне делать? Я изменяю PasswordAuthentication no
на другом хосте?
Это решение специально для пользователей, использующих Windows для подключения к своим удаленным компьютерам, включая облачные образы в AWS Cloud и GCE Cloud.
Недавно использовал это решение для удаленного входа в систему новых развернутых образов VM на GCE.
puttygen
замазка скачатьwinscp
Winscp скачатьЕсли у вас есть личный ключ:
Откройте puttygen
, нажмите кнопку загрузки и выберите файл с секретным ключом ( *.pem
).
Если у вас нет личного ключа:
puttygen
,(из источника 1, ссылка приведена ниже)
notepad
)Скопируйте данные вашего открытого ключа из раздела «Открытый ключ для вставки в OpenSSH файл авторизованных ключей» в генераторе ключей PuTTY и вставьте данные ключа в authorized_keys
файл.
Убедитесь, что в этом файле только одна строка текста.
Загрузите файл author_keys в домашнюю директорию на удаленном компьютере.
Сделать .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 keyring, чтобы защитить этот код локально, чтобы вам не приходилось вводить его все время.
Чтобы сделать некоторые дополнения:
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"
обратите внимание, что цитаты необходимы.
Приложения ssh
и scp
для удаленного входа в систему и для удаленного копирования, соответственно, позволяют общаться с удаленным хостом без ввода пароля. Это требует, чтобы вы следовали процедуре аутентификации, подобной описанной ниже. Под клиентом мы подразумеваем машину, на которой вы сидите, а под сервером - машину, на которую вы хотите войти без ввода пароля. Шаги процедуры аутентификации:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
или $HOME/.ssh/authorized_keys2
на сервер.Существует три разных типа протоколов аутентификации. Вы указываете тип при запуске ssh-keygen:
chmod 0700
быть гарантированно недоступен для чтения другим пользователям) и identity.pub (открытый ключ).ssh-keygen -t rsa
и приводит к файлам id_rsa
(закрытый ключ) и id_rsa.pub
(открытый ключ)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).
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"
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
Я хотел бы добавить ответ для тех, кто может найти, что должен ввести пароль, даже если они прочитали все ответы здесь, потому что вы установили 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-адрес сервера; Пользователь - это имя пользователя, которое вы регистрируете на сервере; а файл идентификации - это файл, в котором вы храните сгенерированный вами ключ.