在PHP中使用ssh2_connect()将文件发送到scponly

时间:2013-09-09 13:15:50

标签: php scp libssh2

我需要将一些上传的文件镜像到网络上的另一台服务器。我目前使用的解决方案是使用ssh2_connect()ssh2_scp_send()在上传文件后立即复制这些文件。我正在使用RSA公钥认证。一切正常,但我们用来复制文件的帐户有一个过期密码,必须每六个月更改一次。在到期和密码更改之间,公钥验证也被禁用。

要解决此问题,我决定将转移转移给没有密码并且scponly作为登录shell的用户nobody。传输适用于scpunison shell命令,但PHP ssh2函数不执行任何操作。

SSH2库的功能是否可以与scponly一起使用,还是应该在其他地方寻找?或者这是scponly配置问题吗?

1 个答案:

答案 0 :(得分:0)

libssh2提供相当有限的诊断功能。我几乎建议您尝试连接phpseclib, a pure PHP SCP implementation,如果不能使用,请启用日志记录。

例如。 (没有记录)

<?php
include('Net/SCP.php');
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('bad login');
}

$scp = new Net_SCP($ssh);
$scp->put('abcd', str_repeat('x', 1024*1024));
?>

随着记录......

<?php
include('Net/SCP.php');
include('Net/SSH2.php');

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('bad login');
}

$scp = new Net_SCP($ssh);
$scp->put('abcd', str_repeat('x', 1024*1024));

echo $ssh->getLog();
?>

假设您不仅仅想要使用phpseclib来获取整个事物,那么可能会从中获得一些有用的信息,这样可以帮助您诊断问题。