You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让多系统用户共用SSH Agent访问Linux堡垒机且不共享私钥?

多用户共用SSH Agent且不共享私钥的实现方案

完全可以实现,核心是在堡垒机上维护一个集中托管的SSH Agent,持有后端服务器的私钥,通过权限控制和命令限制,让授权用户安全使用该Agent访问后端服务器,同时无法获取私钥本身。以下是两种可行方案:

方案一:集中托管SSH Agent+权限控制

1. 创建专用Agent用户与组

  • 创建一个专门用于托管SSH Agent的系统用户(避免用root,降低风险):
    useradd -r -s /usr/sbin/nologin ssh-agent-host
    
  • 创建用户组,将需要访问后端服务器的系统用户加入:
    groupadd ssh-gateway-users
    usermod -aG ssh-gateway-users alice bob  # 替换为实际用户名
    

2. 启动持久化SSH Agent

  • 用systemd托管Agent进程,确保其持续运行。创建/etc/systemd/system/shared-ssh-agent.service:
    [Unit]
    Description=Shared SSH Agent for Gateway Access
    After=network.target
    
    [Service]
    Type=forking
    User=ssh-agent-host
    ExecStart=/usr/bin/ssh-agent -a /var/run/shared_ssh_agent.sock
    ExecStartPost=/usr/bin/ssh-add /opt/ssh-keys/backend_server_key  # 替换为后端私钥路径
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动并启用服务:
    systemctl daemon-reload
    systemctl enable --now shared-ssh-agent.service
    

3. 配置套接字权限

  • 设置套接字的权限,让ssh-gateway-users组内用户可以通过sudo访问:
    chown ssh-agent-host:ssh-gateway-users /var/run/shared_ssh_agent.sock
    chmod 660 /var/run/shared_ssh_agent.sock
    

4. 授权用户使用Agent

  • 在/etc/sudoers中添加规则,允许用户以ssh-agent-host身份执行ssh命令(限制仅能用于后端连接):
    %ssh-gateway-users ALL=(ssh-agent-host) NOPASSWD: /usr/bin/ssh *
    
  • 用户登录堡垒机后,只需指定Agent套接字并通过sudo执行ssh:
    SSH_AUTH_SOCK=/var/run/shared_ssh_agent.sock sudo -u ssh-agent-host ssh backend-server-01
    
    也可以让用户在~/.ssh/config中配置简化命令:
    Host backend-*
      User root  # 后端服务器用户名
      IdentityFile /dev/null
      ProxyCommand SSH_AUTH_SOCK=/var/run/shared_ssh_agent.sock sudo -u ssh-agent-host ssh -W %h:%p %h
    
    之后用户只需执行ssh backend-server-01即可。

方案二:使用sudo代理SSH连接(更轻量)

如果不想维护独立的Agent进程,可以直接通过sudo让用户以持有私钥的管理员身份执行跳转命令,自动复用管理员的SSH Agent:

1. 配置sudo规则

  • 在/etc/sudoers中添加限制,允许用户仅执行指定的ssh跳转命令:
    alice ALL=(admin) NOPASSWD: /usr/bin/ssh -W *:* backend-server-01, /usr/bin/ssh -W *:* backend-server-02
    
    (替换admin为持有后端私钥的管理员用户名,backend-server-*为允许访问的服务器)

2. 用户配置SSH跳转

  • 用户在~/.ssh/config中添加:
    Host backend-server-01
      ProxyCommand sudo -u admin ssh -W %h:%p admin@localhost
      IdentityFile /dev/null
    
  • 用户执行ssh backend-server-01时,会自动通过sudo调用管理员的SSH Agent完成认证,全程无需接触私钥。

关键安全注意事项

  • 禁止私钥导出:SSH Agent本身会阻止私钥导出(ssh-add -L仅能获取公钥),但需确保用户无法直接访问Agent进程或私钥文件。
  • 最小权限原则:sudo规则仅开放必要的命令,避免给用户过度权限。
  • 私钥保护:后端私钥需设置强密码,且仅允许ssh-agent-host或管理员用户读取。

内容的提问来源于stack exchange,提问作者Rocky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:15:43