Claude Code 执行 sudo 需要密码怎么办?
让 Claude Code 去服务器上装软件、改配置、重启服务,绕不开 sudo。而 sudo 一要密码,agent 的命令就停在 [sudo] password for deploy: 这一行,直到工具调用超时。
常见的几种解决办法,各有代价:
做法一:给用户配置免密 sudo
在 /etc/sudoers 里加 deploy ALL=(ALL) NOPASSWD: ALL,问题立刻消失。
代价是:这台服务器上任何以 deploy 身份运行的进程都能无密码获得 root,不只是你的 agent。生产环境通常不允许这样做;可以把 NOPASSWD 限定到少数几个命令,但 agent 的任务往往事先不确定。
做法二:把密码直接告诉 AI
在对话里写“sudo 密码是 xxx”。这是最不推荐的方式:密码会进入对话记录、可能出现在命令行历史和进程列表(echo xxx | sudo -S),也可能被 agent 写进脚本或日志。
做法三:密码存钥匙串,由工具代填(推荐)
思路是:agent 拿到的是“能执行 sudo”的能力,而不是密码本身。
xssh 就是这样处理的:
-
你本人录入一次密码,存进系统凭据管理器(Windows 凭据管理器 / macOS 钥匙串 / Linux Secret Service):
xssh host add web1 --host 10.0.0.5 --user deploy --ask-password # sudo 密码与登录密码不同时,单独设置: xssh host set-password web1 --sudo -
agent 执行需要 sudo 的命令:
xssh exec web1 --sudo -- systemctl restart nginx或在会话里直接运行
sudo ...,xssh 识别到 sudo 密码提示后自动代填。sudo、sudo-rs、doas 都支持;密码错误或用户无 sudo 权限时,会返回退出码 126 和具体原因。 -
密码不会出现在 agent 看到的输出、xssh 的日志、审计记录和会话转录中。
需要知道的边界
钥匙串代填能避免密码进入对话和日志,但它不是强安全边界:与 xssh 运行在同一个系统用户下的程序,理论上可以直接读取钥匙串。对安全要求高的服务器,仍建议使用独立的低权限账户 + 精确限定的 sudo 规则。
小结
| 做法 | 是否卡住 | 密码是否进入对话 | 风险 |
|---|---|---|---|
| 免密 sudo | 否 | 否 | 所有进程都能提权 |
| 把密码告诉 AI | 否 | 是 | 密码泄露面最大 |
| 钥匙串代填(xssh) | 否 | 否 | 同用户进程可读钥匙串 |
想动手试试,可以从 xssh 快速开始 开始,几分钟就能配好。