解决方案:嵌套 SSH 会话。

解决方案:嵌套 SSH 会话。

假设以下设置:

  1. 用户bob正在他的工作站上本地工作foo
  2. 用户alice正在她的工作站上本地工作bar
  3. 用户可以通过存储在 的密钥来bobssh 访问服务器。baz:22bob@foo:.ssh/id_rsa
  4. 用户alice可以通过 ssh 访问bob工作站foo:22,但不能访问服务器baz

有没有办法用于bobsshbaz共享他的会话(通过端口转发?)或密钥(通过ssh-agent转发?)可以alice访问bazbar通过foo(假设bob的身份为foo


附录:

还有一些我应该澄清的想法:

  1. bob不想alice知道他的密码
  2. bob不希望alice能够继续运行rm -rf /home/bobfoo但是baz显然这没问题)。

作为建议经过@mukesh-sai-kumar,人们可以从那里alice登录foo(如bob?)并ssh使用共享密钥。

alice到目前为止,我能看到的最好的方法是为on创建一个新的密钥对bar,允许公钥打开并通过文件中的选项foo自动运行。ssh bob@bazcommand="ssh [...]"authorized_keys

这将允许设置ssh baz实际bar使用ssh bob@foo新的密钥对 via并将使用此特定密钥alice@bar:.ssh/config的登录转发到via (授权 的密钥但限制于呼叫)。bob@foobob@bazbob@foo:.ssh/authorized_keysalicecommandssh 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) $

唯一剩下的问题是bobssh 密钥foo需要与其他人共享 bob的会话由sshfrom发起alice(通过ssh-agent?)

答案1

Alice 可以向 Bob 提供她的公钥,Bob 可以在自己的文件中添加一行,.ssh/authorized_keys以允许 Alice 在 Bob 的工作站上启动 ssh 会话(作为 Bob)foo。使用该command=选项,Bob 可以限制 Alice 的密钥不授予交互式 shell,而是授予bazBob 的嵌套 ssh 连接,并使用 Bob 本地可访问的密钥bar

command="ssh -I .ssh/id_rsa bob@baz:22" ssh-rsa AAA...== alice@whatever

或者,您可以包含更多约束选项(no-port-forwardingfrom=等 - 请参阅sshd有关 AUTHORIZED_KEYS 文件格式的手册页部分)。

当 Alice 运行ssh bob@bar并使用她的私钥进行身份验证时,她将连接bar到 上的 ssh 会话baz,而对 Bob 工作站上的中间会话没有任何控制权。

请注意,从(日志记录、安全审计)的角度来看baz,Alice 发起的隧道连接与 Bob 从他自己的工作站发起的“正常”连接之间没有区别。这可能是您所要求的,但不是您想要的。

为了使受保护的密钥可供 Alice 的会话使用,您可以显式地将环境变量设置SSH_AUTH_SOCK为 Bob 用于其会话的路径(将条目更改authorized_keyscommand="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!

相关内容