Я хочу, чтобы иметь возможность входа в удаленную систему через 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
заменяя пользователя удаленным пользователем и сервером именем или IP-адресом компьютера. Он будет запрашивать пароль SSH, ввести его, и если все будет успешно завершено, вы сможете получить доступ к машине через ssh user@server
без пароля.Введите следующие команды:
ssh-keygen
Нажмите Войти до получения подсказки
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
Это решение специально для пользователей, использующих Windows в SSH в их удаленные машины, включая облачные изображения на Облако AWS а также GCE Cloud
Отключить аутентификацию паролей
Поскольку многие люди с SSH-серверами используют слабые пароли, многие онлайн-злоумышленники будут искать SSH-сервер, а затем начнут гадать пароли в случайном порядке. Злоумышленник может попробовать тысячи паролей в час, и угадать даже самый сильный пароль, которому дано достаточно времени. Рекомендуемое решение - использовать ключи SSH вместо паролей. Быть как трудно догадаться, как обычный SSH-ключ, пароль должен содержать 634 случайных букв и цифр. Если вы всегда сможете войти в систему ваш компьютер с SSH-ключом, вы должны отключить пароль аутентификации.
Если вы отключите аутентификацию паролей, подключитесь с компьютеров, которые вы специально одобрили. Это массово улучшает вашу безопасность, но делает невозможным подключение к ваш компьютер с компьютера друга без предварительного одобрения ПК или от вашего собственного ноутбука, когда вы случайно удаляете свой ключ.
Рекомендуется отключить аутентификацию паролей, если у вас нет конкретная причина не делать этого.
Чтобы отключить аутентификацию паролей, найдите следующую строку в ваш файл sshd_config:
#PasswordAuthentication yes
замените его строкой, которая выглядит так:
PasswordAuthentication no
После того как вы сохранили файл и перезапустили свой SSH-сервер, вы не нужно даже запрашивать пароль при входе в систему.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
Если вы создаете общедоступную / уязвимую пару ключей и входите в систему, используя наш вновь созданный открытый ключ, вам не нужно вводить пароль. В зависимости от конфигурации вашего ключа и / или агента ssh вам может потребоваться защитить ваш ключ парольной фразой.
Вот один из многих короткий способдля вас. Для безопасности этого метода крайне важно, чтобы сгенерированный закрытый ключ оставался приватным! Вы никогда не должны делиться им с кем-либо или разрешать доступ к нему в любом качестве.
Эта команда генерирует достаточно сильный ключ в ~/.ssh/
:
ssh-keygen -b 4096
В ~/.ssh/
вы найдете свой открытый ключ как id_rsa.pub
, Его содержимое должно быть добавлено к вашим серверам authorized_keys
файл путем переноса через переносимый носитель (ручное устройство) или путем короткого включения проверки подлинности на сервере на сервере, затем используя ssh-copy-id ~/.ssh/id_rsa.pub username@server
а затем снова отключить его.
Если вы решили защитить свой ключ парольной фразой (на первом шаге), вы можете использовать ssh-agent
или брандмауэр Ubuntu для обеспечения безопасности этого локального локального доступа, поэтому вам не нужно вводить его все время.
Приложения 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
, Дополнительную информацию см. На страницах руководства для этих программ.
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
Чтобы внести некоторые дополнения:
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 сервера; Пользователь - это имя пользователя, на котором вы заходите на сервер; и файл идентификации - это файл, в котором вы храните ключ, который вы создали.