Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PHP';s ssh2_auth_pubkey_文件需要公钥吗?_Php_Ssh_Ssh Keys - Fatal编程技术网

为什么PHP';s ssh2_auth_pubkey_文件需要公钥吗?

为什么PHP';s ssh2_auth_pubkey_文件需要公钥吗?,php,ssh,ssh-keys,Php,Ssh,Ssh Keys,我可以通过命令行仅使用私钥登录到服务器。为什么这个PHP函数也需要公钥 $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

我可以通过命令行仅使用私钥登录到服务器。为什么这个PHP函数也需要公钥

$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>';
$connection=ssh2\u connect($server\u address,$port,array('hostkey'=>'ssh-rsa'));
if(!@ssh2\u auth\u pubkey\u文件($connection、$username、$public\u key\u path、$private\u key\u path、$password))
{
echo“无法进行身份验证。请检查ssh密钥对。”;
打破
}
echo“已验证”;

我正在编写个人使用测试脚本,以便在调整和部署新服务器时检查防火墙设置和访问权限。我主要只是好奇,因为这似乎表明我缺少一些关于ssh如何工作的信息。但我也很恼火,我不得不给出两条路径,而我似乎只需要一条路径。

我对PHP SSH2函数没有直接的经验。但是PHP在内部调用,其文档说明了
publickey
参数:

公钥文件的路径名。 (例如,
/etc/ssh/hostkey.pub
如果libssh2是针对OpenSSL构建的,则此选项 可以设置为空。

因此,您可以在PHP中传递
null
(因为PHP是针对OpenSSL构建的)。如果不是,这只是PHPSSH2API的一个限制。这不是本质上来自SSH的东西


关于SSH APIE通常允许指定单独的公钥文件的原因,当密钥对文件(通常不正确地称为私钥文件)足够时,请参阅我的答案:

我认为,给定PHP SSH API,这个参数是相当无用的,因为API甚至不允许您加载多个密钥,而且您必须预先指定密码短语。

当您“登录到网站”时,您总是提供公钥

相应的私钥应该非常安全地保存在服务器上,以便它可以使用它来验证提供的公钥私人钥匙不应“在野外”


存在替代方案–通常,服务器只包含一个“签名密钥”(用于自颁发的证书),或者,它仅仅依赖于所提供的密钥已由公认的权威机构签名这一事实。

不幸的是,PHP确实要求参数是指向真实文件的路径,并且该文件必须是由多个长度和格式断言语句强制执行的真实公钥。虽然你回答了我的问题,但谢谢你,这并不能回答问题。此外,PHP函数同时要求private和public,这只是将问题稍微改为“为什么它同时需要这两个?”