Laravel 5.8 使用laravelcollective/remote动态配置SSH执行命令方案咨询
结论
你完全可以继续使用laravelcollective/remote ~5.8扩展包实现动态SSH连接,不需要更换技术方案,该扩展本身支持运行时动态修改配置,无需硬编码到config/remote.php文件中。
实现方案
你可以通过Laravel的Config门面在当前请求生命周期内临时写入连接配置,调用时指定你自定义的临时连接名即可,参考代码如下:
// 从表单获取提交的SSH连接参数 $sshConfig = [ 'host' => request()->input('host'), 'username' => request()->input('username'), 'password' => request()->input('password'), 'key' => '', 'keytext' => '', 'keyphrase' => '', 'agent' => '', 'timeout' => 10, ]; // 动态写入配置,自定义连接名为dynamic config(['remote.connections.dynamic' => $sshConfig]); // 调用动态配置的连接执行命令 $commands = ['cd /home/code && ./runMe.sh']; SSH::into('dynamic')->run($commands, function($line) { echo $line . PHP_EOL; });
注意事项
- 动态配置仅在当前请求生效,不会修改磁盘上的
config/remote.php文件,每次需要连接时重新传入表单参数配置即可。 - 该方案存在较高安全风险:允许用户提交任意SSH凭证并执行服务器命令可能被恶意利用,建议根据业务场景增加IP白名单、命令过滤、操作审计等安全措施,同时不要将用户提交的敏感凭证写入日志、缓存等持久化存储。
- 如果你后续需要支持密钥登录,直接将表单提交的密钥内容赋值给配置的
keytext字段即可,无需调整其他逻辑。
可选替代方案
如果你的业务有更复杂的SSH操作需求(比如大文件SFTP传输、会话保持、多命令交互等),可以直接使用该扩展底层依赖的phpseclib/phpseclib库,自由度更高,但基础命令执行场景下当前扩展完全可以满足需求,不需要额外替换。
内容的提问来源于stack exchange,提问作者code-8
相关产品推荐
相关产品推荐

