Почему PHP ssh2_auth_pubkey_file требует открытого ключа c? - PullRequest
1 голос
/ 25 марта 2020

Я могу войти на сервер, используя только закрытый ключ через командную строку. Почему для этой функции PHP также требуется ключ publi c?

$connection = ssh2_connect($server_address, $port, array('hostkey'=>'ssh-rsa'));
if (!@ssh2_auth_pubkey_file($connection, $username, $public_key_path, $private_key_path, $password))
{
  echo '<h3 class="error">Unable to authenticate. Check ssh key pair.</h3>';
  break;
}
echo '<h3 class="success">Authenticated.</h3>';

Я работаю над тестовым сценарием для личного использования, чтобы проверять настройки брандмауэра и права доступа при настройке и развертывании новых серверов. Мне в основном просто любопытно, поскольку это, кажется, указывает на то, что мне не хватает информации о том, как работает s sh. Но меня также раздражает, что я должен указывать два пути, когда кажется, что мне нужен только один.

Ответы [ 2 ]

1 голос
/ 25 марта 2020

У меня нет прямого опыта работы с PHP функциями SSH2. Но PHP ssh2_auth_pubkey_file внутренне вызывает libssh2_userauth_publickey_fromfile_ex из libssh2 , в документации которого говорится о параметре publickey:

Путь к имени файл ключа publi c. (например, /etc/ssh/hostkey.pub). Если libssh2 построен на OpenSSL, для этой опции можно установить значение NULL.

Так что, возможно, вы можете передать null в PHP (как PHP сборка против OpenSSL). Если нет, то это всего лишь ограничение PHP SSH2 API. Не то, что изначально присуще S SH.


По той причине, что API S SH обычно позволяют указывать отдельный файл ключа publi c, когда файл пары ключей ( обычно не совсем правильно называется файл закрытого ключа) достаточно, см. мой ответ на:
Назначение параметра pubkey JSch.addIdentity

Я считаю, что учитывая PHP S SH API, аргумент довольно бесполезный, так как API даже не позволяет загружать несколько ключей, и вам все равно нужно указывать фразу-пароль заранее.

0 голосов
/ 25 марта 2020

Когда вы входите на веб-сайт, вы всегда представляете ключ publi c.

Соответствующий закрытый ключ должен быть очень надежно хранится на сервере, чтобы он мог использовать его для проверки представленных ключей publi c. Приватные ключи никогда не должны быть "в открытом доступе".

Альтернативы существуют - часто сервер содержит только "ключ подписи" (для самостоятельно выданных сертификатов) или просто полагается о том, что представленный ключ был подписан признанным органом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...