使用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
Medeo
AI视频生成工具
191 查看详情
2. 配置多个服务器信息
可以在 config/servers.php 中定义你的远程服务器列表:
return [ ‘production’ => [ [ ‘host’ => ‘192.168.1.10’, ‘port’ => 22, ‘username’ => ‘root’, ‘password’ => ‘your_password’, // 或使用私钥 ‘key’ => ‘/path/to/private/key’, // 可选 ‘agent’ => true, // 使用 SSH agent ], [ ‘host’ => ‘192.168.1.11’, ‘port’ => 22, ‘username’ => ‘deploy’, ‘password’ => null, ‘key’ => storage_path(‘app/deploy_key’), ] ], ‘staging’ => [ [ ‘host’ => ‘staging.example.com’, ‘port’ => 22, ‘username’ => ‘user’, ‘password’ => ‘pass123’ ] ]];
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 命令中批量执行更新操作:
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 的加密机制保护敏感配置 生产环境中禁用密码登录,仅允许密钥登录基本上就这些。结合 Laravel 的调度系统(app/Console/Kernel.php),你还可以定时自动执行远程任务,比如每日备份、日志清理等。整个流程清晰、可控,适合中小型运维自动化需求。
以上就是Laravel怎么连接和操作多个远程服务器(SSH)的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/863330.html
微信扫一扫
支付宝扫一扫