首先需要安装php_ssh2扩展,这里就不再赘述了。
脚本实例:
$connection = ssh2_connect('127.0.0.1', 22);
ssh2_auth_password($connection, 'root', 'your password');
$stream = ssh2_exec($connection, "cd /; ls");
stream_set_blocking( $stream, true );
$response = stream_get_contents($stream);
var_dump($response);
上面的脚本执行了两条命令(用逗号分隔):
1、cd / 切换到根目录
2、ls 列出所有文件
测试环境为PHP7.1,执行结果如下:
为什么要使用 stream_set_blocking 呢?
PHP手册里这样写到:
该参数的设置将会影响到像 fgets() 和 fread() 这样的函数从资源流里读取数据。 在非阻塞模式下,调用 fgets() 总是会立即返回;而在阻塞模式下,将会一直等到从资源流里面获取到数据才能返回。
这样就很明确了,如果不设置成阻塞模式,php还没等到ssh服务器返回结果,脚本就执行完了,$response就会为空。
但是有些场景下,我们不关心返回值的时候,就可以设置成非阻塞模式了。
例如一些比较耗时的命令,如果是一直等待的话,也会导致一些不必要的麻烦。