Попытка подключения с помощью ssh2_auth_pubkey_file ()

Я пытаюсь сделать 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 и в библиотеке ssh2 php.

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

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

Это известная ошибка в закрытом ключе 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 без предоставления пятого параметра 'passphrase'. Он работает, но вы должны быть осторожны с вашим расшифрованным файлом ключа. Во всяком случае, уровень безопасности на самом деле ужасно не затронут, потому что даже с зашифрованным ключом вам все равно нужно передать кодовую фразу, не зашифрованную в функцию ssh2_auth_pubkey_file …

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

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

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

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

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

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

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

Сообщается, что dirname () является ненадежным.