如何让多系统用户共用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 %hssh 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-02admin为持有后端私钥的管理员用户名,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
相关产品推荐
相关产品推荐

