SSH2更改用户密码(SSH2 change a user password)

2019-07-29 02:26发布

我一直在玩弄SSH,现在我需要通过PHP的SSH2更改用户的密码,

这里是我的代码:

$stream = ssh2_exec($ssh, 'passwd test1234');
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096)) {
    $data .= $buffer;
}
fclose($stream);
echo $data."<hr/>";

$stream = ssh2_exec($ssh, 'saulius123');
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096)) {
    $data .= $buffer;
}
echo $data."<hr/>";
$stream = ssh2_exec($ssh, 'saulius123');
    stream_set_blocking($stream, true);
    $data = '';
    while($buffer = fread($stream, 4096)) {
        $data .= $buffer;
    }
    echo $data."<hr/>";

然而,这只是使的我的PHP脚本挂,任何想法?

Answer 1:

ssh2_exec调用命令; 送输入,你需要写流。

也就是说, $stream ,您可以访问标准输入和标准输出。 所以你需要写你想使用设置密码fwrite$stream试图回读输出之前。

既然你已经把流阻塞模式, passwd是在你的脚本在等待的同时等待你的输入(密码) passwd 。 其结果是,该脚本挂起。



Answer 2:

就个人而言,我会使用phpseclib,纯PHP SSH实现 。 例:

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

$key = new Crypt_RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));

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

echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n");
echo $ssh->read('username@username:~$');
?>

它在libssh2最大的优点是便于携带。 我们使用亚马逊Web服务是我的工作,有时候我们移动到新的督促服务器或开发服务器和最困难的部分中设置起来是安装所有的PECL扩展,什么不是。

phpseclib,相比之下,没有任何要求。



文章来源: SSH2 change a user password