侠客软件 Xiake Labs

Claude Code 执行 sudo 需要密码怎么办?

· 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 就是这样处理的:

  1. 你本人录入一次密码,存进系统凭据管理器(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
  2. agent 执行需要 sudo 的命令:

    xssh exec web1 --sudo -- systemctl restart nginx

    或在会话里直接运行 sudo ...,xssh 识别到 sudo 密码提示后自动代填。sudo、sudo-rs、doas 都支持;密码错误或用户无 sudo 权限时,会返回退出码 126 和具体原因。

  3. 密码不会出现在 agent 看到的输出、xssh 的日志、审计记录和会话转录中。

需要知道的边界

钥匙串代填能避免密码进入对话和日志,但它不是强安全边界:与 xssh 运行在同一个系统用户下的程序,理论上可以直接读取钥匙串。对安全要求高的服务器,仍建议使用独立的低权限账户 + 精确限定的 sudo 规则。

小结

做法 是否卡住 密码是否进入对话 风险
免密 sudo 否 否 所有进程都能提权
把密码告诉 AI 否 是 密码泄露面最大
钥匙串代填(xssh) 否 否 同用户进程可读钥匙串

想动手试试,可以从 xssh 快速开始 开始,几分钟就能配好。