Як ssh на віддалений сервер за допомогою приватного ключа?


77

У мене два сервери. Обидва сервери знаходяться в CentOS 5.6. Я хочу SSH з сервера 1 на сервер 2, використовуючи приватний ключ у мене (OpenSSH SSH-2 приватний ключ).

Я не знаю, як це зробити через Unix. Але те, що я робив у Windows за допомогою Putty, - це подати мій приватний ключ OpenSSH до putty-gen та генерувати приватний ключ у форматі PPK.

Однак я б створив скрипт bash з сервера 1, який буде виконувати деякі команди на сервері 2 через SSH.

Як зробити SSH на сервер 2, використовуючи файл мого приватного ключа з сервера 1?


1
Для багатьох систем Linux та Unix це можна зробити за допомогоюssh-copy-id user@machine
Пол Томблін,

Відповіді:


66

Вам потрібен ваш відкритий ключ SSH, і вам знадобиться приватний ключ ssh. Ключі можна генерувати за допомогою ssh_keygen. Приватний ключ повинен зберігатися на сервері 1, а відкритий - на сервері 2.

Це повністю описано в манежі opensh, тому я цитую його багато. Ви повинні прочитати розділ «Автентифікація». Також посібник openSSH повинен бути дуже корисним: http://www.openssh.org/manual.html

Будьте обережні з ssh, оскільки це впливає на безпеку вашого сервера.

Від man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Це означає, що ви можете зберігати приватний ключ у своєму домашньому каталозі у .ssh. Інша можливість - сказати ssh через -iперемикач параметрів, щоб використовувати спеціальний файл ідентичності. Також від man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

Це для приватного ключа. Тепер вам потрібно ввести ваш відкритий ключ на сервері 2. Знову цитата з man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

Найпростіший спосіб досягти цього - скопіювати файл на сервер 2 та додати його до файлу санкціонованих ключів:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

Авторизація за допомогою відкритого ключа повинна бути дозволена для демона ssh, див man ssh_config. Зазвичай це можна зробити, додавши в конфігураційний файл наступне твердження:

PubkeyAuthentication yes

10
Привіт дякую за зусилля, але мені це потрібно лише. ssh -i keyfileДякую!
Айван Монселлер

8
Після генерації ключа, найпростіший і рекомендований спосіб , щоб встановити його на сервері з ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Жиль

5
Цікаво, як всі забувають згадати, що вам потрібно запуститись ssh-addпісля створення ключа на комп'ютері, з якого ви підключаєтесь. саме це викликає головний біль у більшості людей.
Лука

3
ВАЖЛИВА ПРИМІТКА. Клієнт може мати багато приватних ключів і вибирати на основі довільного імені у своєму приватному ~ / .ssh / config файлі, де Host = дає довільне ім'я, HostName вказує або ім’я, або IP-адресу, Port = цільовий порт, Користувач отримує ім'я користувача, а ItentityFile = вказує на файл приватного ключа. Цей набір функцій часто не помічається і є рішенням багатьох питань конфігурації, таких як наявність декількох пар ключів, які в іншому випадку стикаються у просторі імен.
Річард Т

1
Коли я намагаюся зв’язатися з SSH за допомогою, $ ssh -i ~/.ssh/id_rsa myuser@ssh.myhost.comя отримую помилку, myuser@ssh.myhost.com: Permission denied (publickey).я створив ключ, додав локально за допомогою ssh-addта додав як авторизований ключ на віддалений сервер.
Аарон Франке

21

Я використовував ssh з -i опцією, щоб додати свій ключ тут.

Якщо ви хочете передати arg1, arg2 з .sh-файлом, просто передайте його після .sh-файлу та використовуйте пробіл для розділення.

ssh -i home/avr/new.pem ar@231.221.54.8 "/var/www/beta/betatolive.sh mmin 30"


1
Не забудьте встановити правильні дозволи:chmod 600 home/avr/new.pem
Брайан Хаак

16

Перше, що вам потрібно зробити, це переконатися, що ви запустили команду keygen для генерації ключів:

ssh-keygen -t rsa

Потім скористайтеся цією командою, щоб натиснути клавішу на віддалений сервер, змінивши його, щоб відповідати імені вашого сервера.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'

6
давайте подзвонимо ssh-copy-id user@hostnameзамість цього
andrej

7

Додайте відкритий ключ ( id_[rd]sa.pub) для вашої вихідної машини (звідки ви похитуєтесь) до ~/.ssh/authorized_keysфайлу цільового сервера для імені користувача, в яке ви хочете впарити. Якщо ви втратили відкритий ключ, вам потрібно створити новий ssh-keygen. Використання аргументів за замовчуванням для цього має бути нормальним для більшості цілей. Якщо вам потрібні більш детальні вказівки, ви можете отримати в Google тисячі навчальних посібників.


4

ssh-copy-id - використовуйте локально доступні ключі для авторизації входу на віддаленій машині

Використовуйте ssh-copy-idна сервері 1, якщо у вас є пара ключів (згенерована за допомогою ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

Тепер ви маєте можливість мати ssh на сервер 2 за допомогою ssh за допомогою приватного ключа

ssh -i ~/.ssh/id_rsa user@server2_hostname

Дійсно, якщо ви перейдете cat ~/.ssh/authorized_keysна сервер 2, ви побачите, що відкритий ключ додається до вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.