Php SSH2更改用户密码
我一直在玩SSH,现在我需要通过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
$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
来执行此操作。(一般来说,这可能仍然不是写方法,但这是可能的。)