通过另一个用户建立隧道 ssh

Tunnel ssh through another user

注意:在电子邮件的第二部分,我将解释我是如何遇到这个问题的,即通过 gitolite。但问题是 ssh 问题而不是 gitolite 问题。尽管如此,我还是添加了 gitolite 标签,以防有人针对特定情况有临时解决方案。

这是一般问题。

我的服务器有两个用户,alicebobalice 可以通过 su - bob 使用 bob 身份,但她不知道 bob 的密码(无论出于何种原因)。爱丽丝想从她的笔记本电脑上以 bob 身份通过 ssh 进入服务器,但她不能,因为她没有他的密码。有没有办法利用她假设 bob 的身份来模仿 ssh bob@server 的行为的能力?在某种程度上,我想通过更改用户身份隧道 ssh 连接。我认为这是一个远景,我猜 ssh 不允许这样做。但我想我还是会问的。

问题出在哪里:gitolite

我正在尝试使用 gitolite。我让服务器管理员设置 gitolite 用户,他给了我在服务器上执行 su - gitolite 的权力。但是,他没有给我gitolite的密码,鉴于当天的时间,服务器管理员已经回家了,所以我必须等到明天再问他那个密码。同时,我想找到一个解决方法(如果可能的话),只是为了好玩。

简要 gitolite-ssh 交互回顾(据我所知):gitolite/.ssh 中的 authorized_keys 文件有这样的行

# gitolite start
command="/usr/share/gitolite3/gitolite-shell some_user_name",no-portforwarding,
no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa SOME_USER_NAME_KEY
# gitolite end

因此,当授权密钥尝试通过 ssh 进入 gitolite 的帐户时,整个 gitolite 机器将被激活。事实上,当一个授权密钥sshs(你如何结合动词'to ssh'?!?)进入gitolite的账户时,gitolite-shell被执行并接管,只允许git 相关命令。你可能会问“那么如果你是它的授权密钥之一,为什么你需要 gitolite 的密码?很高兴你问了。为了让 some_user_name 修改 gitolite 的配置,向 ~gitolite/.ssh/authorized_keys 添加这样的行是不够的;some_user_name 需要添加到 gitolite 的配置文件中,该文件存储在 git 存储库中 ~gitolite/repository/gitolite-admin.git。为了更改此配置文件,必须克隆该 repo,修改配置文件,然后将 repo 推回。问题:允许在 gitolite-admin repo 中推送修改的用户列在gitolite-admin repo 本身...一开始,初始化 gitolite 的用户(在本例中,用户 gitolite)是此类配置文件中唯一列出的用户。所以我需要能够以 gitolite 的身份访问该 conf 文件,以便将我的用户添加到可以更改配置的用户中。一旦我这样做了,我就可以忘记用户 gitolite 并管理git像我一样使用 olite 存储库。

Is there a way to exploit her ability to assume bob's identity to mimic the behavior of ssh bob@server?

当然:如果 Alice 可以作为 bob(使用 su - bob)打开一个 shell 会话,她可以:

  • 访问 /home/bob/.ssh
  • 将他的 public 和私钥复制到 /home/alice/.ssh/id_rsa.bob.pubid_rsa.bob
  • 使用 ssh -i /home/alice/.ssh/id_rsa.bob bob@server(或使用 bob 打开 ssh 会话

别忘了阅读:

提醒:对 gitolite 的任何使用始终是通过 gitgitolite 用户完成的,绝不是 'alice' 或 'bob' 用户。