实战SOP:免密SSH让Agent管VPS

举报
shuai1021 发表于 2026/11/01 11:01:35 2026/11/01
【摘要】 SSH公钥免密认证是从手动运维到自动化运维的分水岭。本文给出三步打通免密(生成密钥、部署公钥、配置客户端)再到AI Agent通过SSH管理VPS的可复用做法,附安全要点和典型运维指令。

背景:SSH密码登录是自动化的天敌

管过VPS的人都知道,日常运维离不开SSH登录:看日志、重启服务、更新系统、改配置、查端口。每次输密码看着小事,但它挡住了一个更大的可能——自动化。任何自动化工具,不管是Ansible、CI/CD流水线,还是AI Agent,都卡在同一个地方:SSH要密码,而自动化场景下没有人坐在终端前输密码。

常见的绕法是脚本里硬编码密码,或者用sshpass传密码。前者是安全隐患,密码一泄露整批服务器门户大开;后者每次连接都走密码协商,慢且不稳定。更根本的问题是:这些绕法只解决了"连得上"的问题,没解决"连得快、连得稳、能自动化"的问题。

SSH公钥免密认证是标准答案。配好之后,连接不再需要密码,建立速度更快,对网络抖动容忍度更高。而一旦免密打通,AI Agent就能通过SSH直接管理VPS:你用自然语言说"检查服务器磁盘空间",Agent自己SSH上去跑命令、拿结果、给你汇报。本文给出从免密配置到Agent运维的可复用做法。

方案:三步打通免密 + Agent接入

第一步:生成密钥对

ssh-keygen -t ed25519 -C "agent@vps-manage" -f ~/.ssh/vps_key
参数 含义 说明
-t ed25519 密钥类型 比RSA更短更安全,现代OpenSSH默认支持
-C 注释 标记这把钥匙的用途,方便管理多台服务器
-f 文件名 指定私钥路径,默认是id_ed25519

生成两个文件:vps_key(私钥,本地保管,权限600)和vps_key.pub(公钥,要放到服务器上)。私钥永不离开本机,公钥即使公开也无法反推私钥——这是非对称加密的安全性基础。

第二步:部署公钥到服务器

ssh-copy-id -i ~/.ssh/vps_key.pub user@your-server-ip

这条命令做的事:SSH登录目标服务器,把公钥追加到~/.ssh/authorized_keys文件,自动设置正确的目录权限(700)和文件权限(600)。最后一次需要输密码,之后就免密了。

如果服务器端口不是22,加-p参数:

ssh-copy-id -i ~/.ssh/vps_key.pub -p 2222 user@your-server-ip

第三步:配置SSH客户端

在~/.ssh/config里给服务器起别名,以后连接直接用别名:

Host vps1
    HostName your-server-ip
    User deploy
    Port 22
    IdentityFile ~/.ssh/vps_key
    ServerAliveInterval 60
    ServerAliveCountMax 3

配好之后,ssh vps1就能直接登录,不用记IP、端口、用户名。ServerAliveInterval让SSH每60秒发心跳包,防止空闲断连——这对Agent长时间保持连接很关键。

Agent接入:让AI通过SSH管VPS

免密打通后,Agent可以通过两种方式操作VPS:

方式 原理 适合场景
直接SSH命令 Agent调ssh vps1 "command"执行远程命令 一次性查询、快速诊断
SSH+脚本 Agent生成脚本,scp上传,ssh执行 批量操作、部署、配置变更

典型Agent运维指令示例:

# 查磁盘空间
ssh vps1 "df -h"

# 看内存使用
ssh vps1 "free -m"

# 查看服务状态
ssh vps1 "systemctl status nginx"

# 查最近100条错误日志
ssh vps1 "journalctl -p err -n 100 --no-pager"

# 安全更新
ssh vps1 "sudo apt update && sudo apt upgrade -y"

# 重启指定服务
ssh vps1 "sudo systemctl restart nginx"

用自然语言驱动时,你只需说"检查vps1的磁盘空间",Agent自己组装SSH命令、执行、解析输出、给出结论。如果发现问题(比如磁盘使用率超过90%),Agent可以主动建议清理方案,甚至直接帮你清理。

实践要点

  1. 用ed25519而不是RSA。 ed25519密钥更短(公钥只有68字符)、生成更快、安全性更高。RSA-2048能用但已经不算现代选择,新系统一律用ed25519。

  2. 私钥权限必须600。 chmod 600 ~/.ssh/vps_key。权限太宽松SSH会拒绝使用私钥并报"Permissions too open"。服务器端~/.ssh目录权限700、authorized_keys权限600,ssh-copy-id会自动设好,手动部署时别漏。

  3. 一台服务器一把钥匙,别共用。 不同服务器用不同密钥对,一把泄露不影响其他。在~/.ssh/config里用IdentityFile指定每台服务器对应的私钥,避免SSH挨个尝试所有私钥(慢且可能触发Too many authentication failures)。

  4. **给Agent用专用用户,不用root。 | 在服务器上创建一个专用用户(如agent),只授予需要的sudo权限,而不是直接用root。在/etc/sudoers里用agent ALL=(ALL) /usr/bin/systemctl, /usr/bin/journalctl限定Agent只能执行特定命令。这样即使Agent执行了意外命令,破坏范围也有限。

  5. ServerAliveInterval防止断连。 Agent执行长时间命令(如apt upgrade)时,SSH连接可能因空闲超时被中间路由器掐断。在~/.ssh/config里设ServerAliveInterval 60和ServerAliveCountMax 3,让SSH定期发心跳包保持连接。autossh可以进一步实现断线自动重连。

  6. **先连一次再交给Agent。 | 免密配好后,先自己ssh vps1手动连一次,确认能免密登录。第一次连接会有host key确认提示,Agent处理这个可能卡住。手动连一次后host key写入~/.ssh/known_hosts,后续Agent连接就不会遇到这个提示了。

小结

SSH免密认证是从手动运维到自动化运维的分水岭。三步走——生成密钥、部署公钥、配置客户端——配好之后,AI Agent就能通过SSH直接管理VPS,你用自然语言下指令,Agent负责组装命令、执行、解析结果。关键安全原则:用ed25519密钥、一机一钥、专用用户最小权限、先手动连一次写known_hosts。免密打通的不是"不用输密码"这件事,而是"让AI能真正帮你管服务器"这条路径。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。