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 $?');