Попытка подключения с помощью ssh2_auth_pubkey_file () - PullRequest
9 голосов
/ 04 августа 2010

Я пытаюсь создать скрипт php, который запускается на терминале, который подключится к удаленному серверу по ssh и получит файл. пока это мой код

#!/usr/bin/php -q
<?php
$cwd = dirname(__FILE__).'/';
$filename = 'retrive-this.file';
$host = 'hostip';

$connection = ssh2_connect($host, 22, array('hostkey'=>'ssh-rsa'));
$methods = ssh2_auth_pubkey_file($connection, 'remoteuser',
                                 $cwd.'ssh/id_rsa.pub',
                                 $cwd.'ssh/id_rsa', "it's an inception");
var_dump($methods);

//ssh2_scp_recv($connection, "/remote/server/path/to/$filename", $cwd.$filename);
?>

на данный момент у меня проблемы с функцией ssh2_auth_pubkey_file(), когда я запускаю скрипт, он возвращает это:

PHP Warning:  ssh2_auth_pubkey_file(): Authentication failed for remoteuser using public key in /home/tonyl/Projects/get-file-ssh.php on line 10
bool(false)

Файлы ключей имеют разрешение -rw-r--r-- (644). Также открытый ключ уже добавлен к авторизованным ключам удаленного пользователя. Я могу ssh с помощью команды ssh как обычно, поэтому я не думаю, что это проблема авторизации ssh, но кто знает. Я новичок в ssh и php-библиотеке ssh2.

Я могу подключиться, используя ssh2_auth_password(), если я включу его в удаленном файле sshd_config, но я не хочу этого делать, так как это уменьшает передачу безопасности.

Любые идеи о том, что я могу сделать.

Ответы [ 2 ]

9 голосов
/ 20 августа 2012

Это известная ошибка в php: закрытый ключ, защищенный паролем, не может использоваться в определенных комбинациях.

См .: https://bugs.php.net/bug.php?id=58573

ssh2_auth_pubkey_file () сломан, когда публичныйФайл ключа защищен паролем, а libssh2 скомпилирован с помощью libgcrypt, что и делают debian / ubuntu и, возможно, другие.Я работаю над решением этой ошибки, но если вам нужна эта рабочая перестройка libssh2 самостоятельно с помощью OpenSSL.

Обходное решение может заключаться в хранении закрытого ключа в незашифрованном виде.Чтобы расшифровать ключ:

openssl rsa -in id_rsa -out id_rsaNOPASSWORD

, а затем используйте файл id_rsaNOPASSWORD без указания пятого параметра «пароль».Это работает, но вы должны быть осторожны с расшифрованным файлом ключей.В любом случае, уровень безопасности не очень сильно зависит, потому что даже с зашифрованным ключом вам все равно придется передавать незашифрованную фразу-пароль в функцию ssh2_auth_pubkey_file ...

Надеюсь, это поможет.

0 голосов
/ 09 августа 2011

это похоже на ошибку прямо здесь. FILE это путь к файлу, не так ли? так что это выглядит как /somedir/somefile.php, и все, что вы сделали, это добавили / в конце .php, так что я не думаю, что это действительно правильно. см http://www.php.net/manual/en/language.constants.predefined.php

$cwd = dirname(__FILE__).'/';

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

Я думаю, что код, который вам нужен,

if (!defined('__DIR__')) {
    $iPos = strrpos(__FILE__, "/");
    define("__DIR__", substr(__FILE__, 0, $iPos) . "/");
}
$cwd=__DIR__ . '/';

и помните, что когда дело доходит до удаленного каталога, вы должны использовать ssh2_sftp_realpath ().

dirname () считается ненадежным.

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