Вопрос или проблема
Я могу безопасно подключаться к своему серверу Linux на Windows, используя puTTY и Core FTP LE, как к пользователю root, так и к пользователю “spring”.
Но я хочу подключиться с помощью программы PHP для Windows к пользователю “spring”, используя библиотеку ssh2.
Я попробовал подключиться тремя способами:
- используя файлы .crt и .key для сертификата LetsEncrypt для моего веб-сайта,
Файл .crt начинается с
—–BEGIN CERTIFICATE—– MIIFBDCCA+ygAwIBAgISBBqIyVqLzl77cQe4Tw9SyKiEMA0GCSqGSIb3DQEBCwUA
Файл .key начинается с
-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA0G4hPr1pIeeJ5eEJM3b8vrNNOE/7Dk7ohNA0HTAPynVS8e2E
Это соединение проходит, но возникает ошибка при аутентификации.
- используя rsa закрытый ключ и файлы .pub для доступа SSH моего пользователя (через Webuzo, который похож на cPanel),
Файл .pub начинается с
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCHzy1UuwxMKz/3Zm3UymxuL7RtXvovStan165I2ATTPe1g1BqEu6
и файл .priv начинается с
-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCnNUOge2
Это соединение проходит, но возникает ошибка при аутентификации.
- используя файлы .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: Подготовка ключей
-
Проверка формата ключей: Убедитесь, что ваши ключи находятся в нужных форматах. PHP SSH2 поддерживает OpenSSH форматы. Для аутентификации с использованием публичного и приватного ключей используйте:
- Приватный ключ:
-----BEGIN OPENSSH PRIVATE KEY-----
или-----BEGIN RSA PRIVATE KEY-----
- Публичный ключ:
ssh-rsa ...
Примечание: Формат
.ppk
(используемый PuTTY) не совместим с библиотекой SSH2 в PHP. Вам нужно конвертировать его в OpenSSH формат с помощью PuTTYgen. - Приватный ключ:
-
Генерация ключей: Если вы еще не создали ключи, сделайте это с использованием OpenSSH (например, используя команду
ssh-keygen
). Это обеспечит правильный формат.
Шаг 2: Проверка пользователя и прав доступа
-
Добавление публичного ключа: Убедитесь, что содержимое вашего публичного ключа добавлено в файл
~/.ssh/authorized_keys
на вашем сервере для пользователяspring
. Это даст права на доступ через SSH. -
Проверка прав доступа: Убедитесь, что
~/.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 на сервере или временно использовать парольную аутентификацию для получения более детальных логов ошибок.