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


wget http://libssh2.org/download/libssh2-1.4.3.tar.gz
tar vxzf libssh2-1.4.3.tar.gz
cd libssh2-1.4.3
./configure --prefix=/usr/local/webserver/libs
make
make 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=yes
NETWORKING_IPV6=no
HOSTNAME=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 $?');


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值