Как аутентифицироваться для загрузки файлов по SSH в PHP

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

Я могу безопасно подключаться к своему серверу Linux на Windows, используя puTTY и Core FTP LE, как к пользователю root, так и к пользователю “spring”.

Но я хочу подключиться с помощью программы PHP для Windows к пользователю “spring”, используя библиотеку ssh2.

Я попробовал подключиться тремя способами:

  1. используя файлы .crt и .key для сертификата LetsEncrypt для моего веб-сайта,

Файл .crt начинается с

—–BEGIN CERTIFICATE—– MIIFBDCCA+ygAwIBAgISBBqIyVqLzl77cQe4Tw9SyKiEMA0GCSqGSIb3DQEBCwUA

Файл .key начинается с

-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0G4hPr1pIeeJ5eEJM3b8vrNNOE/7Dk7ohNA0HTAPynVS8e2E

Это соединение проходит, но возникает ошибка при аутентификации.

  1. используя rsa закрытый ключ и файлы .pub для доступа SSH моего пользователя (через Webuzo, который похож на cPanel),

Файл .pub начинается с

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCHzy1UuwxMKz/3Zm3UymxuL7RtXvovStan165I2ATTPe1g1BqEu6

и файл .priv начинается с

-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCnNUOge2

Это соединение проходит, но возникает ошибка при аутентификации.

  1. используя файлы .ppk и .pub для доступа SSH моего пользователя.

Файл .ppk начинается с

PuTTY-User-Key-File-3: ssh-rsa Encryption: aes256-cbc Comment: [email protected]

Это соединение проходит, но возникает ошибка при аутентификации.

В каждом случае я получаю значение FALSE (ошибка) от sh2_auth_pubkey_file.

Функции, которые я вызываю, следующие:

Подключение:

ssh2_connect(SF::$sec['hostIP'], (int)SF::$sec['securePort']);

Аутентификация:

sh2_auth_pubkey_file(SF::$sftp,SF::$sec['user'],SF::$sec['publicKeyPath'], SF::$sec['privateKeyPath'],SF::$sec['privateKeyPwd']);

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

Для успешной аутентификации и загрузки файлов на сервер по SSH с использованием библиотеки SSH2 в PHP, необходимо учитывать несколько важных аспектов. Давайте разберем каждый шаг и возможные ошибки.

Шаг 1: Подготовка ключей

  1. Проверка формата ключей: Убедитесь, что ваши ключи находятся в нужных форматах. PHP SSH2 поддерживает OpenSSH форматы. Для аутентификации с использованием публичного и приватного ключей используйте:

    • Приватный ключ: -----BEGIN OPENSSH PRIVATE KEY----- или -----BEGIN RSA PRIVATE KEY-----
    • Публичный ключ: ssh-rsa ...

    Примечание: Формат .ppk (используемый PuTTY) не совместим с библиотекой SSH2 в PHP. Вам нужно конвертировать его в OpenSSH формат с помощью PuTTYgen.

  2. Генерация ключей: Если вы еще не создали ключи, сделайте это с использованием OpenSSH (например, используя команду ssh-keygen). Это обеспечит правильный формат.

Шаг 2: Проверка пользователя и прав доступа

  1. Добавление публичного ключа: Убедитесь, что содержимое вашего публичного ключа добавлено в файл ~/.ssh/authorized_keys на вашем сервере для пользователя spring. Это даст права на доступ через SSH.

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

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

Шаг 3: Подключение через PHP

Убедитесь, что у вас установлена расширение SSH2 для PHP. Затем используйте следующий код для подключения:

// Параметры подключения
$host = 'ваш_хост';
$port = 22; // По умолчанию 22
$user = 'spring';
$privateKeyPath = '/путь/к/вашему/private_key';
$publicKeyPath = '/путь/к/вашему/public_key'; // не всегда требуется
$privateKeyPwd = ''; // Если ключ защищен паролем, укажите его

// Установить соединение
$connection = ssh2_connect($host, $port);
if (!$connection) {
    die('Не удалось установить соединение.');
}

// Аутентификация
if (ssh2_auth_pubkey_file($connection, $user, $publicKeyPath, $privateKeyPath, $privateKeyPwd)) {
    echo "Аутентификация прошла успешно!";
} else {
    die('Не удалось пройти аутентификацию.');
}

Шаг 4: Отладка

Если вы продолжаете получать ошибку аутентификации, попробуйте следующее:

  • Убедитесь, что используете правильные пути к ключам.
  • Запустите SSH-сервер с более высоким уровнем логирования (например, LogLevel DEBUG) на вашем Linux-сервере, чтобы просматривать, что именно идет не так. В логе будет видно, проводилась ли попытка подключения и какие ошибки возникли.
  • Проверьте права на ключи на сервере и локальной машине, они должны быть строго ограничены.

Заключение

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

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

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