Как подключиться к удаленному серверу с помощью закрытого ключа?

77

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

Я не знаю, как сделать это через 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.

Это полностью описано на странице openssh, поэтому я процитирую многое из этого. Вам следует прочитать раздел «Аутентификация». Также руководство 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параметр switch использовать специальный файл идентификации. Также из 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 и добавить его в файл authorized_keys:

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
echox
источник
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вместо этого позвоним
Андрей
7

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

Kevin
источник
4

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

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

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

Теперь вы должны иметь возможность подключиться к ssh на сервере 2 с помощью закрытого ключа.

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

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

Сида Чжоу
источник