php实现ssh终端
使用 phpseclib 库实现 SSH 连接
phpseclib 是一个纯 PHP 实现的 SSH 库,无需额外扩展。安装可通过 Composer:
composer require phpseclib/phpseclib:~3.0
连接示例代码:
use phpseclib3\Net\SSH2;
$ssh = new SSH2('hostname');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('ls -la');
通过系统命令调用 SSH
若服务器已安装 OpenSSH,可用 PHP 直接调用系统命令:
$command = "ssh username@hostname 'ls -la'";
$output = shell_exec($command);
echo $output;
建立交互式终端
使用 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);
}
密钥认证方式
使用密钥登录更安全:
use phpseclib3\Crypt\PublicKeyLoader;
$key = PublicKeyLoader::load(file_get_contents('/path/to/private.key'));
$ssh = new SSH2('hostname');
if (!$ssh->login('username', $key)) {
exit('Login Failed');
}
异常处理
建议添加异常捕获:
try {
$ssh = new SSH2('hostname');
$ssh->login('username', 'password');
echo $ssh->exec('whoami');
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}
注意事项
- 确保服务器已开启 SSH 服务(默认端口 22)
- 生产环境建议使用密钥认证而非密码
- 长时间操作需设置超时:
$ssh->setTimeout(30) - 敏感信息应存储在环境变量中,避免硬编码







