使用phpseclib替代Laravel废弃的Remote组件,通过Composer安装后,在config/servers.php中配置多服务器信息,并创建SSH工具类实现远程操作。

Laravel 本身不直接提供 SSH 连接功能,但你可以借助 Laravel 的任务调度和 illuminate/remote 组件(已废弃)或更现代的方案如 phpseclib/phpseclib 来连接并操作多个远程服务器。下面介绍一种稳定、实用的方法。
使用 phpseclib 操作多个远程服务器
注意:Laravel 官方的 Remote 组件在 Laravel 5.8 后已被移除,推荐使用第三方安全且活跃维护的库——phpseclib/phpseclib。
以下是具体实现步骤:
1. 安装 phpseclib
通过 Composer 安装:
composer require phpseclib/phpseclib
2. 配置多个服务器信息
可以在 config/servers.php 中定义你的远程服务器列表:
3. 创建 SSH 工具类
新建一个服务类来管理 SSH 连接:
servers = config('servers.production'); // 可动态传入配置组 } public function runOnAll($commands) { $results = []; foreach ($this->servers as $server) { $ssh = new SSH2($server['host'], $server['port']); $login = false; if (isset($server['key'])) { $key = new RSA(); $privateKey = file_get_contents($server['key']); $key->loadKey($privateKey); $login = $ssh->login($server['username'], $key); } elseif ($server['password']) { $login = $ssh->login($server['username'], $server['password']); } if (!$login) { $results[] = [ 'host' => $server['host'], 'success' => false, 'output' => 'Login failed' ]; continue; } // 执行多条命令 $output = ''; foreach ((array)$commands as $cmd) { $output .= $ssh->exec($cmd . "\n"); } $ssh->disconnect(); $results[] = [ 'host' => $server['host'], 'success' => true, 'output' => trim($output) ]; } return $results; } }4. 在控制器或命令中调用
例如在 Artisan 命令中批量执行更新操作:
composer install --quiet', 'php artisan cache:clear' ]; $results = $manager->runOnAll($commands); foreach ($results as $result) { if ($result['success']) { $this->info("✅ {$result['host']}: Success"); $this->line($result['output']); } else { $this->error("❌ {$result['host']}: " . $result['output']); } } } }5. 可选:支持不同环境切换
可以扩展 ServerManager,接受参数选择不同配置组(如 staging、production),便于灵活调用。
6. 安全建议
- 避免在代码中硬编码密码,使用密钥认证 + SSH Agent 更安全
- 私钥文件权限设为 600,并放在
storage/等非公开目录 - 考虑使用 Laravel 的加密机制保护敏感配置
- 生产环境中禁用密码登录,仅允许密钥登录
app/Console/Kernel.php),你还可以定时自动执行远程任务,比如每日备份、日志清理等。整个流程清晰、可控,适合中小型运维自动化需求。










