Я хочу мати змогу увійти до віддаленого через 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 під час тестування? Мені не дуже хочеться його обробляти і повністю замкнути.
Permission denied (publickey).
із PasswordAuthentication no
. Що мені робити? Чи потрібно змінити PasswordAuthentication no
на іншого хоста?
Це рішення призначене спеціально для користувачів, які використовують Windows, щоб запустити ssh на віддалені машини, включаючи зображення хмари на AWS Cloud та GCE Cloud
Нещодавно використовується це рішення для віддаленого входу в систему нових розгорнутих зображень vm на GCE.
puttygen
завантажити завантаженняwinscp
wincp завантажитиЯкщо у вас є приватний ключ:
Відкрийте puttygen
, натисніть кнопку завантаження та виберіть файл приватного ключа ( *.pem
).
Якщо у вас немає приватного ключа:
puttygen
,(від джерела 1, посилання, наведене нижче)
notepad
)Скопіюйте дані свого відкритого ключа з розділу "Публічний ключ для вставки у файл OpenSSH-авторизованих ключів" у генераторі ключів PuTTY та вставте ключові дані у authorized_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, щоб захистити цю локальну фіксацію, тому вам не доведеться весь час вводити її.
Щоб внести деякі доповнення:
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
бути впевнений, що цей файл не читається для інших) та ident.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
Я хотів би додати відповідь для тих, хто може виявити, що вони повинні ввести пароль, навіть якщо вони тут прочитали всі відповіді, тому що ви встановили 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 сервера; Користувач - це ім'я користувача, на якому ви входите на сервер; і файл посвідчення - це файл, в якому ви зберігаєте створений вами ключ.