我们有一个[email protected]
SSH 帐户,可以使用ts_key.pub/ts_key.priv
网关服务器 ( gateway.org
) 的 SSH 密钥对进行访问。我们有许多系统管理员需要访问该帐户。他们每个人都有自己的 SSH 帐户gateway.org
,例如[email protected]
.
有没有办法继续ts_key.pub/ts_key.priv
使用gateway.org
并允许系统管理员使用它,但是不暴露它给系统管理员?因此,如果其中一人离职,并且他的帐户gateway.org
被关闭,那么他将无法ts_key.pub/ts_key.priv
再使用。
更新:有人建议我(IRC/#OpenSSH 上的好人)使用密码加密私钥,然后使用 ssh-agent/ssh-add。不过具体细节我没搞清楚...
答案1
作为替代方案,您可以在authorized_keys 文件中添加密钥前缀[电子邮件受保护]使用“from=ip.address.of.gateway.org”,仅当连接来自网关系统时才有效地使密钥起作用。
有关更多详细信息,请参阅“man sshd”。
另一种可能性是将私钥放在gateway.org
禁用登录的单独帐户上。我们以该帐户secretkeeper
为例。然后,您可以向系统管理员授予对该帐户的有限 sudo 访问权限,如下所示(sudoers
文件语法):
User_Alias ADMINUSERS=sysadmin1, sysadmin2, sysadmin3 #...etc.
ADMINUSERS ALL=(secretkeeper) /usr/bin/ssh secretremote
为了用户友好性,指定~secretkeeper/.ssh/config
尽可能多的连接参数:
Host secretremote
User topsecret
HostName remote.org
EscapeChar none
IdentityFile /some/where/ts_key.priv
现在您sysadmin1
和其他人将能够运行sudo -u secretkeeper ssh secretremote
,但不能通过其他命令sudo
(除非有其他sudoers
定义)。secretremote
只是一个关键字,可以是任何内容,只要它在sudoers
和~secretkeeper/.ssh/config
文件中相同即可。
由于文件中指定的命令sudoers
包含参数,因此仅接受该特定命令。然后sudo
将以用户身份运行该命令(并且仅该命令)secretkeeper
,该命令可以读取SSH配置文件和私钥,然后建立连接。并且由于sudo
会话仅运行该ssh
命令,因此一旦 SSH 断开连接,sudo
会话就会结束;将不会以secretkeeper
用户身份运行交互式 shell。
当然,所有这一切都要求您的系统管理员用户不能拥有gateway.org
系统的 root 访问权限。