假设以下设置:
- 用户
bob
在他的工作站上本地工作foo
。 - 用户
alice
在她的工作站上本地工作bar
。 - 用户可以通过存储在 中的密钥
bob
对服务器进行 ssh 访问。baz:22
bob@foo:.ssh/id_rsa
- 用户
alice
可以通过 ssh 访问bob
工作站foo:22
,但不能访问服务器baz
。
有没有办法让bob
sshbaz
共享他的会话(通过端口转发?)或密钥(通过ssh-agent
转发?),以便alice
可以baz
从bar
via foo
(假设bob
的身份打开foo
)访问?
附录:
还有一些我应该澄清的想法:
bob
不想alice
知道他的密码bob
不希望alice
能够继续运行rm -rf /home/bob
(foo
但baz
显然这会很好)。
正如@mukesh-sai-kumar所建议的那样,一个人可以登录(作为?)并从那里使用共享密钥。alice
foo
bob
ssh
到目前为止,我能看到的最佳方法是为 on 创建一个新的密钥对alice
,bar
允许打开公钥并通过文件中的选项foo
自动运行。ssh bob@baz
command="ssh [...]"
authorized_keys
这将允许设置实际使用新的密钥对 viassh baz
并使用此特定密钥将登录转发到via (授权的密钥但仅限于呼叫)。bar
ssh bob@foo
alice@bar:.ssh/config
bob@foo
bob@baz
bob@foo:.ssh/authorized_keys
alice
command
ssh baz
这样,两个新的约束就会得到满足,alice
甚至不会看到任何东西,正如这个假设的交互式会话所示:
[alice@foo:~] (1) $ hostname
foo
[alice@foo:~] (2) $ whoami
alice
[alice@foo:~] (3) $ ssh baz
[bob@baz:~] (1) $ hostname
baz
[bob@baz:~] (2) $ whoami
bob
[bob@baz:~] (3) $ exit
[alice@foo:~] (4) $ hostname
foo
[alice@foo:~] (5) $ whoami
alice
[alice@foo:~] (6) $
唯一剩下的问题是bob
ssh 密钥foo
需要与 由from (via ?)bob
发起的会话共享。ssh
alice
ssh-agent
解决方案:嵌套 SSH 会话。
alice 可以通过 SSH 以 bob 的身份登录到 bob 的工作站(foo:22),然后通过 SSH 以 bob 的身份(以及他的密钥,因为现在 alice 都可以访问它们)登录到 baz。
基于命令的表示形式:
图解表示:
Alice 可以给 Bob 她的公钥,Bob 可以在他自己的
.ssh/authorized_keys
文件中添加一行,这将允许 Alice 在 Bob 的工作站上启动一个 ssh 会话(作为 Bob)foo
。使用该command=
选项,Bob 可以限制 Alice 的密钥不授予交互式 shell,而是授予 Bob 的嵌套 ssh 连接baz
,并使用 Bob 在本地可访问的密钥bar
。command="ssh -I .ssh/id_rsa bob@baz:22" ssh-rsa AAA...== alice@whatever
或者,您可以包含更多约束选项(
no-port-forwarding
,from=
等 - 请参阅sshd
AUTHORIZED_KEYS 文件格式的手册页部分)。当 Alice 运行
ssh bob@bar
并使用她的私钥进行身份验证时,她将连接bar
到 ssh 会话baz
,而无需对 Bob 工作站上的中间会话进行任何控制。请注意,从
baz
(日志记录、安全审计)的角度来看,Alice 发起的这个隧道连接与 Bob 从他自己的工作站发起的“正常”连接没有区别。这可能是您要求的,但不是您想要的。为了使受保护的密钥可供 Alice 用于她的会话,您可以将环境变量显式设置为
SSH_AUTH_SOCK
Bob 用于其会话的路径(将authorized_keys
条目更改为command="SSH_AUTH_SOCK=/path/to/bobs/agent_socket ssh bob@baz:22" ssh-rsa AAA...
)以避免在路径更改时更新路径(通常注销/登录),Bob 可以使用指定的显式路径代表 Alice 运行一个专用代理(ssh-agent -a ~/.ssh/agent_for_alice
并且只添加特定的密钥SSH_AUTH_SOCK=~/.ssh/agent_for_alice ssh-add ~/.ssh/id_rsa
并输入密码。