php实现ssh终端
PHP 实现 SSH 终端连接
通过 PHP 实现 SSH 终端连接通常需要使用扩展库或第三方工具。以下是几种常见的方法:
使用 phpseclib 库
phpseclib 是一个纯 PHP 实现的 SSH 客户端库,支持 SSH2 协议。以下是示例代码:
require_once('phpseclib/Net/SSH2.php');
$ssh = new Net_SSH2('hostname');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('ls -la');
安装 phpseclib 可以通过 Composer:
composer require phpseclib/phpseclib
使用 ssh2 扩展
PHP 的 ssh2 扩展是 PECL 提供的原生扩展,需先安装并启用:

pecl install ssh2
然后在 php.ini 中启用扩展:
extension=ssh2.so
示例代码:

$connection = ssh2_connect('hostname', 22);
if (!ssh2_auth_password($connection, 'username', 'password')) {
exit('Authentication Failed');
}
$stream = ssh2_exec($connection, 'ls -la');
stream_set_blocking($stream, true);
echo stream_get_contents($stream);
使用 shell_exec 调用系统命令
如果服务器允许直接调用系统命令,可以通过 shell_exec 调用本地 SSH 客户端:
$command = 'ssh username@hostname "ls -la"';
echo shell_exec($command);
使用 proc_open 实现交互式终端
如果需要交互式终端,可以通过 proc_open 实现:
$descriptors = [
0 => ['pipe', 'r'], // stdin
1 => ['pipe', 'w'], // stdout
2 => ['pipe', 'w'] // stderr
];
$process = proc_open('ssh username@hostname', $descriptors, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], "ls -la\n");
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($process);
}
注意事项
- 确保服务器已安装并配置 SSH 服务。
- 使用密码认证时需注意安全性,建议使用密钥认证。
phpseclib是纯 PHP 实现,无需额外扩展,但性能可能略低。ssh2扩展性能较好,但需额外安装。
密钥认证示例
使用 phpseclib 进行密钥认证:
require_once('phpseclib/Net/SSH2.php');
require_once('phpseclib/Crypt/RSA.php');
$ssh = new Net_SSH2('hostname');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('private_key'));
if (!$ssh->login('username', $key)) {
exit('Login Failed');
}
echo $ssh->exec('ls -la');






