Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 SSH2更改用户密码_Php_Shell_Ssh_Centos - Fatal编程技术网

Php SSH2更改用户密码

Php SSH2更改用户密码,php,shell,ssh,centos,Php,Shell,Ssh,Centos,我一直在玩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

我一直在玩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/>";
$stream=ssh2_exec($ssh,'passwd test1234');
流\设置\阻塞($stream,true);
$data='';
而($buffer=fread($stream,4096)){
$data.=$buffer;
}
fclose($流);
echo$data.“
”; $stream=ssh2_exec($ssh,'saulius123'); 流\设置\阻塞($stream,true); $data=''; 而($buffer=fread($stream,4096)){ $data.=$buffer; } echo$data.“
”; $stream=ssh2_exec($ssh,'saulius123'); 流\设置\阻塞($stream,true); $data=''; 而($buffer=fread($stream,4096)){ $data.=$buffer; } echo$data.“
”;

不过这只是让我的PHP脚本挂起,有什么想法吗

ssh2\u exec
调用该命令;要发送输入,您需要写入流

也就是说,
$stream
允许您访问标准输入和标准输出。因此,在尝试读回输出之前,您需要在
$stream
上使用
fwrite
写入要设置的密码


由于您已将流置于阻塞模式,
passwd
正在等待您的输入(密码),同时脚本正在等待
passwd
。结果,脚本挂起。

ssh2\u exec
调用该命令;要发送输入,您需要写入流

也就是说,
$stream
允许您访问标准输入和标准输出。因此,在尝试读回输出之前,您需要在
$stream
上使用
fwrite
写入要设置的密码

由于您已将流置于阻塞模式,
passwd
正在等待您的输入(密码),同时脚本正在等待
passwd
。结果,脚本挂起。

我个人会使用。例如:

<?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相比,它的最大优势是可移植性。当我工作时,我们使用AmazonWeb服务,有时我们会转移到新的prod服务器或dev服务器,设置它们最困难的部分是安装所有的PECL扩展等等

相反,phpseclib没有任何要求。

我个人会使用。例如:

<?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相比,它的最大优势是可移植性。当我工作时,我们使用AmazonWeb服务,有时我们会转移到新的prod服务器或dev服务器,设置它们最困难的部分是安装所有的PECL扩展等等


相反,phpseclib没有任何要求。

我也会编写($stream,“saulius123\r saulius123\r”);要将密码设置为“saulius123”?我相信
\n
(习惯的Unix换行符)是正确的,而且您可能不需要额外的空格,但我相信这应该会起作用。(当然,假设您拥有root权限;否则,
passwd
可能会首先提示输入旧密码。)谢谢您的出色工作!如何执行VI命令?同样的方式?还有,我将如何进行复制?谢谢
vi
期望在另一端实际有一个终端;我不确定它是否会接受没有一个完整的终端模拟器可用。调用一些类似于
sed
awk
的东西可能是更好的方法(或者在这个问题上,通过SFTP读取文件,在本地更改它,然后发送回来——当然,这取决于文件的大小)。要回答您的问题,您可以通过发送ASCII码27来发送
。您可以使用转义序列
\x1b
来执行此操作。(一般来说,这可能还不是写方法,但这是可能的。)我也会写fwrite($stream,“saulius123\r saulius123\r”);要将密码设置为“saulius123”?我相信
\n
(习惯的Unix换行符)是正确的,而且您可能不需要额外的空格,但我相信这应该会起作用。(当然,假设您拥有root权限;否则,
passwd
可能会首先提示输入旧密码。)谢谢您的出色工作!如何执行VI命令?同样的方式?还有,我将如何进行复制?谢谢
vi
期望在另一端实际有一个终端;我不确定它是否会接受没有一个完整的终端模拟器可用。调用一些类似于
sed
awk
的东西可能是更好的方法(或者在这个问题上,通过SFTP读取文件,在本地更改它,然后发送回来——当然,这取决于文件的大小)。要回答您的问题,您可以通过发送ASCII码27来发送
。您可以使用转义序列
\x1b
来执行此操作。(一般来说,这可能仍然不是写方法,但这是可能的。)