Вопрос или проблема
У меня есть два сервера. Оба сервера работают на 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-ключей обеспечивает значительно более высокий уровень безопасности по сравнению с обычной аутентификацией по паролю, поэтому настоятельно рекомендуется использовать этот метод.