本文介绍如何在 go 中绕过 shell 命令拼接,直接通过 os.open 读取本地公钥文件并以标准输入(stdin)方式传输至远程服务器的 authorized_keys,避免 shell 注入、路径错误与跨平台兼容性问题。 本文介绍如何在 go 中绕过 shell 命令拼接,直接通过 os.open 读取本地公钥文件并以标准输入(stdin)方式传输至远程服务器的 authorized_keys,避免 shell 注入、路径错误与跨平台兼容性问题。在自动化部署或基础设施管理场景中,经常需要通过 Go 程序将本地生成的 SSH 公钥安全地追加到远程 Linux/macOS 服务器的 ~/.ssh/authorized_keys 文件中。许多开发者最初尝试用 exec.Command 模拟终端管道命令(如 cat key.pub | ssh user@host 'cat >> ~/.ssh/authorized_keys'),但这种方式存在严重缺陷:不仅因字符串拼接易引发 shell 注入和路径解析错误(如示例中误写为 ~/.shh/authorized_keys),更因 exec.Command 的参数传递机制不支持 Unix 管道符 | —— 它只会把整个字符串当作单一命令名执行,导致运行失败。正确的做法是解耦「读取」与「传输」逻辑:由 Go 直接打开公钥文件,再将其作为 stdin 注入 ssh 子进程。这样既规避了 shell 解析依赖,又确保了二进制安全传输(无换行截断、编码失真风险),且天然兼容 macOS、Linux 等不同系统。以下为推荐实现方案:import ( "log" "os" "os/exec" "path/filepath")func copySSHPubKeyToServer(pubKeyPath, userAtHost string) error { // 1. 安全读取公钥文件(自动处理路径) absPath, err := filepath.Abs(pubKeyPath) if err != nil { return err } file, err := os.Open(absPath) if err != nil { return err } defer file.Close() // 2. 构建 ssh 命令:注意目标路径应为 ~/.ssh/authorized_keys(非 .shh!) cmd := exec.Command("ssh", userAtHost, "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys") cmd.Stdin = file // 3. 执行并捕获输出(便于调试) output, err := cmd.CombinedOutput() if err != nil { log.Printf("SSH command failed: %s", string(output)) return err } return nil}// 使用示例func main() { homeDir := fileUtil.FindUserHomeDir() // 假设该工具函数已定义 pubKeyPath := filepath.Join(homeDir, ".ssh", "foobar.pub") userAtHost := "alice@example.com" if err := copySSHPubKeyToServer(pubKeyPath, userAtHost); err != nil { log.Fatal("Failed to install SSH key:", err) } log.Println("SSH public key successfully installed.")}? 关键优势说明: 幻导航网 发现优质实用网站,开启网络探索之旅!
使用 Go 语言安全高效地将 SSH 公钥复制到远程服务器
张小明
前端开发工程师
别再复制粘贴了!手把手教你从零搭建Keil5 MDK工程模板(STM32F103C8T6实战)
从零构建Keil5工程模板:嵌入式开发效率革命指南 每次启动新项目都要重复配置路径、添加库文件、设置编译选项?这种低效的开发模式该终结了。本文将彻底改变你的嵌入式开发流程,通过构建一个高度可复用的Keil5 MDK工程模板,实现&qu…
三大突破:FakeLocation如何通过应用级Hook技术实现Android精准虚拟定位
三大突破:FakeLocation如何通过应用级Hook技术实现Android精准虚拟定位 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 在移动应用生态中,位置隐私保护已成…
当我们用AI生成测试用例时,人类测试员正在消失:一场关于测试价值与角色的深度重构
效率的狂飙与职业的隐忧在软件工程领域,AI(尤其是生成式AI与机器学习技术)正以前所未有的速度重塑测试实践的格局。从自动生成边界值、等价类测试用例,到利用自然语言处理解析需求文档并生成测试脚本,再到通过强化学习…
SAP CO-PA数据流实战:从S4配置到BW建模的完整避坑指南
SAP CO-PA数据流实战:从S4配置到BW建模的完整避坑指南 在SAP生态系统中,获利能力分析(CO-PA)作为企业战略决策的核心工具,其数据流设计与实现质量直接影响管理层的商业洞察。本文将带您深入S4 HANA配置到BW/4HANA建模的全流程,揭示…
神经网络入门:从基础原理到实战应用
1. 神经网络入门:揭开智能背后的数学面纱第一次听说"神经网络"这个词时,我正盯着手机上的语音识别功能发呆。这个能听懂我方言的魔法盒子,背后竟然是一堆数学公式在运作?更神奇的是,去年我随手拍的花草照片&…
VSCode AI编程助手Mysti:多模型协作与团队化工作流实战
1. 项目概述:当你的VSCode里住进了一支AI编程梦之队 如果你和我一样,每天大部分时间都泡在VSCode里,那你肯定对AI编程助手不陌生。从Copilot的单行补全,到Cursor的聊天式编程,再到Claude Code的深度推理,每…