通过PHP SSH更改Unix远程服务器的密码
我正试图使用phpseclib通过其NET_SSH2功能更改远程服务器的密码。下面是我正在使用的通过PHP SSH更改Unix远程服务器的密码,php,unix,ssh,passwords,Php,Unix,Ssh,Passwords,我正试图使用phpseclib通过其NET_SSH2功能更改远程服务器的密码。下面是我正在使用的 <?php require_once('Net/SSH2.php'); $ssh = new Net_SSH2('server1.server.com'); if (!$ssh->login('user', 'pass')) { exit('Login Failed'); } $ssh->write("passwd
<?php
require_once('Net/SSH2.php');
$ssh = new Net_SSH2('server1.server.com');
if (!$ssh->login('user', 'pass')) {
exit('Login Failed');
}
$ssh->write("passwd\n");
$ssh->read('(current) UNIX Password:');
$ssh->write("oldpass\n");
$ssh->read('New password:');
$ssh->write("newpass\n");
$ssh->read('Retype new password:');
$ssh->write("newpass\n");
echo $ssh->read('[prompt]');
?>
每次我的脚本挂起,似乎什么都没做。我有什么地方做错了吗
以下是关于此的文档:
这可能会对您有所帮助
<?php
$output = shell_exec('sudo passwd root');
echo "<pre>$output</pre>";
?>
您可以通过
shell\u exec
函数执行任何linux命令这应该适合您
如果在strace(1)
下运行程序,它读取的确切字符串是什么?为什么不等待最初的shell提示呢?如果添加调试echo
语句,它到底在哪里暂停?结果是我将一个p字母大写。现在很有魅力。感谢您的详细回答。@user1328041如果您自己找到并回答了,请随意删除该问题,这样其他人就不会阅读了it@user1328041:请在下面添加您的解决方案作为答案并接受它。您需要在“$ssh->write”之前添加“$ssh->read”。我把代码贴在下面。
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->read('username@username:~$');
$ssh->write("passwd\n");
echo $ssh->read('(current) UNIX password:');
$ssh->write("oldpassword\n");
echo $ssh->read('New UNIX password:');
$ssh->write("newpassword\n");
echo $ssh->read('Retype new UNIX password:');
$ssh->write("newpassword\n");
echo $ssh->read('passwd: all authentication tokens updated successfully.');
?>