用PHP远程修改服务器密码和hostname

来源:互联网 发布:怎样投诉淘宝卖家客服 编辑:程序博客网 时间:2024/06/05 04:10

wget http://libssh2.org/download/libssh2-1.4.3.tar.gztar vxzf libssh2-1.4.3.tar.gzcd libssh2-1.4.3./configure --prefix=/usr/local/webserver/libsmakemake install/usr/local/webserver/php/bin/pecl install ssh2

这时候扩展安装会被终止,因为php的ssh2扩展还没有正式版本,这时候需要我们手动的签出,于是,如下:
/usr/local/webserver/php/bin/pecl install channel://pecl.php.net/ssh2-0.12

之后,php会自动完成下载扩展包,解压,环境检测,编译以及安装,安装的过程中会询问libssh2的安装路径,输入,片刻,安装完成!

不出意外的话,phpinfo();中会显示libssh2的模块,恭喜,真的成功了。


扩展提供多种ssh的连接方式,可以通过用户名密码来连接,也可以通过密钥文件来连接,现以我最近经历的一个项目为例,用密钥链接。

修改密码,牵扯到交互式的输入问题,我们可以使用echo的方法,如下

$ip   = '255.255.255.255';$port = 22;$connection = @ssh2_connect($ip, $server['port'], array('hostkey'=>'ssh-rsa'));if (!$connection) {    return false;}@ssh2_auth_pubkey_file($connection, 'root','application/config/id_rsa.pub', 'application/config/id_rsa');ssh2_exec($connection, $cmd);$stream = ssh2_exec($connection, "echo '{$password}' | passwd root --stdin");stream_set_blocking($stream, true);$res = '';while ($buf = fread($stream, 4096)) {    $res .= $buf;}echo $res;

接着就是修改hostname了,hostname可以使用hostname命令修改,但是据我所知,这只是本次生效,服务器重启以后就失效了,想要做到永久修改,那就得改配置文件,但是改文件又不能立即生效,那就只有双管齐下,都改了!CentOS下,配置文件位于/etc/sysconfig/network,其格式为:

NETWORKING=yesNETWORKING_IPV6=noHOSTNAME=v88

如何定外到hostname在哪一行呢,想了好久,最后用sed编辑器解决了,思路如下:

$hostname = 'v89';$stream = ssh2_exec($connection, "sed -i '/HOSTNAME/d' /etc/sysconfig/network ; echo 'HOSTNAME={$hostname}' >> /etc/sysconfig/network ; echo $?;");if (0 == fread($stream, 4096)) {    ssh2_exec($connection, "hostname {$hostname}");;}

删除掉HOSTNAME那一行后,再追加一行到文件中。echo '$?';返回的是上条命令是否成功,一般成功的话,返回0,不成功多数是2。



修改密码的命令,经过我多次尝试,最终使用如下命令,可以兼容Centos和Ubuntu,避免了使用sleep和passwd需要等待的问题:

$stream = ssh2_exec($connection, 'echo "root:password" | chpasswd | echo $?');


原创粉丝点击