php实现ssh
PHP 实现 SSH 连接
PHP 可以通过扩展库或第三方工具实现 SSH 连接,以下是几种常见方法:
使用 ssh2 扩展
ssh2 是 PHP 的官方扩展,需在服务器上安装并启用。以下是基本用法:
// 检查扩展是否加载
if (!function_exists('ssh2_connect')) {
die('SSH2 扩展未安装');
}
// 连接 SSH 服务器
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
die('SSH 连接失败');
}
// 认证方式:密码
if (!ssh2_auth_password($connection, 'username', 'password')) {
die('SSH 认证失败');
}
// 执行命令
$stream = ssh2_exec($connection, 'ls -l');
stream_set_blocking($stream, true);
$output = stream_get_contents($stream);
echo $output;
使用 phpseclib 库
phpseclib 是纯 PHP 实现的 SSH 库,无需安装扩展:
require 'vendor/autoload.php';
use phpseclib3\Net\SSH2;
$ssh = new SSH2('example.com');
if (!$ssh->login('username', 'password')) {
die('SSH 登录失败');
}
echo $ssh->exec('pwd');
使用 shell_exec 调用系统命令
通过调用系统命令实现 SSH 连接(需服务器支持):
$output = shell_exec('ssh username@example.com "ls -l"');
echo $output;
注意事项
ssh2扩展需在php.ini中启用,安装命令如sudo apt-get install php-ssh2(Linux)。phpseclib可通过 Composer 安装:composer require phpseclib/phpseclib:~3.0。- 确保服务器防火墙允许 SSH 端口(默认 22)的通信。
- 敏感信息(如密码)应通过环境变量或配置文件管理,避免硬编码。
高级功能
- SFTP 文件传输:
ssh2_sftp或phpseclib的SFTP类。 - 端口转发:
ssh2_tunnel实现隧道功能。 - 密钥认证:
ssh2_auth_pubkey_file或phpseclib的密钥登录方法。
根据项目需求选择合适方案,phpseclib 推荐用于跨平台兼容性。







