Я хочу смочь войти в удаленное через 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 -t rsa
(При запросе пароля оставьте его пустым)
Затем:
cat ~/.ssh/id_rsa.pub | ssh имя пользователя@имя_хоста 'cat >> .ssh/authorized_keys'
(Для этого нужна папка . ssh должна быть в домашней директории на целевом имени хоста, с файлом authorized_keys)
Конечно, замените имя пользователя на желаемое, а имя хоста на желаемое имя хоста или IP-адрес
После этого просто SSH на этот ящик, как вы привыкли.
Если вы создаете пару открытых/печатанных ключей и входите в систему, используя только что созданный открытый ключ, вам не нужно будет вводить пароль. В зависимости от конфигурации вашего ключа и/или агента ssh вам может потребоваться защита ключа с помощью парольной фразы.
Вот одна из многих коротких s для вас. Для безопасности этого метода очень важно, чтобы сгенерированный приватный ключ оставался приватным! Вы никогда не должны делиться им с кем-либо или разрешать доступ к нему в любом качестве.
Эта команда генерирует достаточно сильный ключ в ~/.ssh/
:
ssh-keygen -b 4096
В ~/.ssh/
вы найдете свой открытый ключ в виде id_rsa.pub
. Его содержимое должно быть добавлено к файлу authorized_keys
ваших серверов путем передачи его через переносной носитель (флэш-накопитель) или кратковременной активации парольной аутентификации на сервере, а затем с помощью ssh-copy-id ~/.ssh/id_rsa. pub username@server
и затем снова отключить его.
Если вы выбрали защиту ключа с помощью парольной фразы (на первом шаге), вы можете использовать ssh-agent
или брелок Ubuntu для локальной защиты этого фрагмента, чтобы вам не приходилось постоянно вводить его.
Обычно я использую для этого sshpass
, устанавливаю его с помощью sudo apt-get install sshpass
и использую его так
sshpass -p 'password' ssh your_username@your_server
Введите следующие команды:
ssh-keygen
Нажимайте Enter до тех пор, пока не получите запрос
ssh-copy-id -i root @ ip_address
(один раз спросит для пароля хост-системы)
ssh root @ ip_address
Теперь вы можете войти в систему без пароля.
Для внесения некоторых дополнений:
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
хмод +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
. Дополнительную информацию см. На страницах руководства по этим программам.
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
Отключить аутентификацию по паролю
Поскольку многие люди с серверами SSH используют слабые пароли, многие онлайн-злоумышленники будут искать SSH-сервер, а затем начнут угадывать пароли наугад. Злоумышленник может попробовать тысячи паролей в час, и угадайте даже самый надежный пароль за достаточно времени. В Рекомендуемое решение - использовать SSH-ключи вместо паролей. Быть как трудно угадать, как обычный ключ SSH, пароль должен содержать 634 случайных буквы и цифры. Если вы всегда сможете войти в ваш компьютер с ключом SSH, вы должны отключить пароль аутентификации вообще.
Если вы отключите аутентификацию по паролю, будет возможно только подключаться с компьютеров, которые вы специально одобрили. Это массово повышает вашу безопасность, но делает невозможным подключение к ваш собственный компьютер с ПК друга без предварительного утверждения ПК, или со своего портативного компьютера, если вы случайно удалили ключ.
Рекомендуется отключить аутентификацию по паролю, если у вас нет конкретная причина не делать этого.
Чтобы отключить аутентификацию по паролю, найдите следующую строку в ваш файл sshd_config:
#PasswordAuthentication да
замените его строкой следующего вида:
PasswordAuthentication no
После сохранения файла и перезапуска сервера SSH вы не нужно даже запрашивать пароль при входе в систему.
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
Это решение специально предназначено для пользователей, использующих Windows до ssh на своих удаленных машинах, включая облачные образы в AWS Cloud и GCE Cloud
Это решение недавно использовалось для удаленного входа в новые развернутые образы виртуальной машины на GCE.
puttygen
puttygen download winscp
winscp download Если у вас есть закрытый ключ:
Откройте puttygen
, нажмите кнопку загрузки и выберите свой закрытый ключ ( *. Pem
) файл.
Если у вас нет личного ключа:
puttygen
, (из источника 1, ссылка приведена ниже)
). Скопируйте данные открытого ключа из раздела «Открытый ключ для вставки в файл authorized_keys OpenSSH» генератора ключей PuTTY и вставьте данные ключа в файл authorized_keys
.
Убедитесь, что в этом файле только одна строка текста.
Загрузите файл authorized_keys на главную каталог на удаленном компьютере.
Создайте каталог .ssh
(если он не существует)
Скопируйте файл authorized_keys
в каталог .ssh
.
(это заменит любой существующий файл authorized_keys
, обратите на это внимание).
Если файл существует, просто добавьте содержимое этого файла в существующий файл.
Выполните команды, чтобы установить разрешения:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
] Теперь вы сможете использовать ssh
на удаленном компьютере без необходимости каждый раз вводить учетные данные.
Я хотел бы добавить ответ для тех, кто может обнаружить, что им следует ввести пароль, даже если они прочитали здесь все ответы, потому что вы установили 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-адрес сервера; Пользователь - это имя пользователя, с которым вы входите на сервер; а файл идентификации - это файл, в котором вы храните сгенерированный вами ключ.