假设以下设置:
- 用户
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
通过foo
(假设bob
的身份为foo
)?
附录:
还有一些我应该澄清的想法:
bob
不想alice
知道他的密码bob
不希望alice
能够继续运行rm -rf /home/bob
(foo
但是baz
显然这没问题)。
作为建议经过@mukesh-sai-kumar,人们可以从那里alice
登录foo
(如bob
?)并ssh
使用共享密钥。
alice
到目前为止,我能看到的最好的方法是为on创建一个新的密钥对bar
,允许公钥打开并通过文件中的选项foo
自动运行。ssh bob@baz
command="ssh [...]"
authorized_keys
这将允许设置ssh baz
实际bar
使用ssh bob@foo
新的密钥对 via并将使用此特定密钥alice@bar:.ssh/config
的登录转发到via (授权 的密钥但限制于呼叫)。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
需要与其他人共享 bob
的会话由ssh
from发起alice
(通过ssh-agent
?)。
答案1
Alice 可以向 Bob 提供她的公钥,Bob 可以在自己的文件中添加一行,.ssh/authorized_keys
以允许 Alice 在 Bob 的工作站上启动 ssh 会话(作为 Bob)foo
。使用该command=
选项,Bob 可以限制 Alice 的密钥不授予交互式 shell,而是授予baz
Bob 的嵌套 ssh 连接,并使用 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
并输入密码。
答案2
解决方案:嵌套 SSH 会话。
alice 可以通过 SSH 使用 bob 的身份登录到 bob 的工作站 (foo:22),然后通过 SSH 使用 bob 的身份(以及他的密钥,因为它们现在都可供 alice 访问)登录到 baz。
基于命令的表示:
alice@bar:~$ ssh bob@foo
bob@foo's password:
---snip----
bob@foo:~$ ssh -i /home/bob/.ssh/id_rsa (your-user)@baz
----RSA ID based authentication----
your-user@baz:~$
图解表示:
alice@bar -> Log into foo as user bob -> use bob's stored key to log into baz -> Achieved!