与远程用户共享 ssh 会话/密钥

msc*_*lli 5 ssh ssh-tunneling ssh-agent

假设以下设置:

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

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


附录:

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

  1. bob不想alice知道他的密码
  2. bob不希望alice能够运行rm -rf /home/bobfoo(上baz不过这将是罚款很明显)。

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

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

这将允许设置ssh bazbar实际ssh bob@foo通过使用新的密钥对alice@bar:.ssh/config与转发bob@foo使用该特定键登录到bob@baz通过bob@foo:.ssh/authorized_keys(授权alice的关键,但限制commandssh 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) $
Run Code Online (Sandbox Code Playgroud)

唯一剩下的问题是bobssh 密钥 onfoo需要与 from (via ?)bob发起的会话共享sshalicessh-agent

PKa*_*app 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输入密码。