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

Вопрос или проблема

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

Я не знаю, как это сделать в Unix. Но то, что я сделал в Windows, используя Putty, это передал свой приватный ключ OpenSSH в putty-gen и сгенерировал приватный ключ в формате PPK.

Тем не менее, я собираюсь создать bash-скрипт на Сервере 1, который будет выполнять некоторые команды на Сервере 2 через SSH.

Как мне подключиться к Серверу 2, используя файл своего приватного ключа с Сервер 1?

Кратко: Чтобы использовать существующий приватный ключ, необходимо указать путь к файлу идентичности с параметром -i следующим образом:

ssh -i '/путь/к/ключевому/файлу' имя_пользователя@сервер

Вам понадобится ваш публичный 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
     Содержит приватный ключ для аутентификации. Эти файлы содержат
     чувствительные данные и должны быть доступны только пользователю, но не 
     доступны другим (чтение/запись/выполнение). ssh просто проигнорирует файл 
     приватного ключа, если он доступен другим. Можно указать пароль при 
     генерации ключа, который будет использоваться для шифрования 
     конфиденциальной части этого файла с использованием 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Содержит публичный ключ для аутентификации. Эти файлы не являются
     конфиденциальными и могут (но не обязаны) быть доступны для чтения любому.

Это означает, что вы можете хранить свой приватный ключ в своем домашнем каталоге в .ssh. Еще один вариант – указать ssh с помощью параметра -i использовать специальный файл идентичности.
Также из man ssh:

 -i identity_file
     Выбирает файл, из которого считывается идентичность (приватный ключ) для 
     аутентификации RSA или DSA. По умолчанию используется ~/.ssh/identity для 
     протокола версии 1, и ~/.ssh/id_rsa и ~/.ssh/id_dsa для протокола 
     версии 2. Файлы идентичности также могут быть указаны на основании хоста 
     в конфигурационном файле. Возможно наличие нескольких параметров -i 
     (и нескольких идентичностей, указанных в конфигурационных файлах).

Это относится к приватному ключу. Теперь вам нужно добавить ваш публичный ключ на Сервер 2. Снова цитата из man ssh:

  ~/.ssh/authorized_keys
         Содержит список публичных ключей (RSA/DSA), которые могут быть 
         использованы для входа в систему как этот пользователь. Формат 
         этого файла описан в мануале sshd(8). Этот файл не является сильно 
         конфиденциальным, но рекомендованные разрешения - чтение/запись для 
         пользователя, и недоступность для других.

Самый простой способ сделать это – скопировать файл на Сервер 2 и добавить его в файл authorized_keys:

scp -p ваш_публичный_ключ.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

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

PubkeyAuthentication yes

Я использовал ssh с параметром -i, чтобы добавить ваш ключ сюда.

Если вы хотите передать arg1,arg2 с файлом .sh, просто передайте их после файла .sh, разделив пробелом:

ssh -i home/avr/new.pem [email protected] "/var/www/beta/betatolive.sh mmin 30"

Первое, что вам нужно сделать, это убедиться, что вы выполнили команду keygen для генерации ключей:

ssh-keygen -t rsa

Затем используйте эту команду, чтобы отправить ключ на удаленный сервер, изменив её, чтобы она соответствовала имени вашего сервера.

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

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

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

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

Теперь вы должны иметь возможность подключаться к Серверу 2, используя ssh и приватный ключ

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

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

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

Я нашел уточнение клиент/сервер на DigitalOcean:

перефразируя/выжимая: Генерируйте пару ключей на вашем ЛОКАЛЬНОМ (клиентском) компьютере, используя ssh-keygen. Затем скопируйте только что сгенерированный публичный ключ на УДАЛЕННЫЙ, серверный компьютер, в файл удаленного ~/.ssh/authorized_keys.

На серверном компьютере sshd также должен быть правильно настроен. Это включает в себя наличие директивы “PubkeyAuthentication yes” в файле /etc/ssh/sshd_config. (Не забудьте перезапустить службу sshd после изменения конфигурации)

Вышеуказанное сработало для меня. Мне не нужно было изменять “PasswordAuthentication yes” на “no”. Я смог войти без явного пароля, с публичным ключом, несмотря на последнее.

Ответ или решение

Чтобы подключиться к удалённому серверу с помощью SSH, используя ключ для аутентификации, вы должны выполнить несколько шагов по настройке и использованию SSH на вашем сервере. В данном случае вы хотите SSH с Сервер 1 на Сервер 2 с использованием существующего закрытого ключа (OpenSSH SSH-2 Private Key). Следуйте инструкциям ниже.

Шаг 1: Генерация ключевой пары (если это ещё не сделано)

Если у вас ещё нет ключей SSH, вы можете создать их с помощью команды ssh-keygen. Находясь на Сервере 1, выполните следующую команду:

ssh-keygen -t rsa

Эта команда создаст пару ключей: закрытый ключ (обычно ~/.ssh/id_rsa) и открытый ключ (~/.ssh/id_rsa.pub). Убедитесь, что вы не накладываете пароль на закрытый ключ, если хотите использовать его в скриптах.

Шаг 2: Копирование открытого ключа на Сервер 2

Чтобы подключиться к Серверу 2, необходимо добавить открытый ключ из Сервер 1 в файл authorized_keys на Сервере 2. Для этого выполните следующую команду на Сервере 1:

ssh-copy-id -i ~/.ssh/id_rsa.pub username@server2_hostname

Замените username на имя пользователя, под которым вы хотите подключиться к Серверу 2, а server2_hostname на IP-адрес или доменное имя сервера. Эта команда автоматически скопирует ваш открытый ключ и добавит его в файл ~/.ssh/authorized_keys на Сервере 2.

Шаг 3: Проверка конфигурации SSH на Сервере 2

Убедитесь, что SSH-сервер на Сервере 2 настроен для использования аутентификации по открытым ключам. Для этого проверьте файл конфигурации SSH:

sudo nano /etc/ssh/sshd_config

Убедитесь, что следующие строки присутствуют и не закомментированы (без # в начале):

PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

После любых изменений не забудьте перезапустить службу SSH:

sudo systemctl restart sshd

Шаг 4: Подключение с помощью SSH

Теперь, когда ваш открытый ключ скопирован, вы можете подключиться к Серверу 2 с помощью следующей команды:

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

Здесь -i указывает используемый закрытый ключ (в данном случае ~/.ssh/id_rsa). Если вы сохранили ключи в другом месте или под другим именем, просто поменяйте путь.

Шаг 5: Запуск команд через SSH в скрипте

Для исполнения команд на Сервере 2 через скрипт, вы можете использовать такую конструкцию в своем bash-скрипте:

#!/bin/bash

ssh -i ~/.ssh/id_rsa username@server2_hostname "команда_для_выполнения"

Не забудьте добавить к скрипту права на выполнение:

chmod +x ваш_скрипт.sh

Заключение

С помощью вышеуказанных шагов вы можете легко подключиться к удалённому серверу с помощью SSH и выполнить необходимые команды. Использование SSH-ключей обеспечивает значительно более высокий уровень безопасности по сравнению с обычной аутентификацией по паролю, поэтому настоятельно рекомендуется использовать этот метод.

Оцените материал
Добавить комментарий

Капча загружается...