我需要让一组用户通过 ssh 通过服务器('bastion')跳转到另一台机器('dest')以提交代码。
好像我的选择是:
告诉用户ProxyCommand在他们的 .ssh/config 文件中使用,例如:
Host dest
ProxyCommand ssh -q bastion nc -q0 dest 22
使用ForceCommand在sshd的配置文件,如
Match Group hopUsers
ForceCommand ssh dest $SSH_ORIGINAL_COMMAND
使用用户文件中的command选项.ssh/authorized_keys,例如
command="ssh dest"
第一个解决方案很棒,它适用于 mercual 提交等。 -- 问题是我不想在bastion机器上给我的用户一个有效的 shell 。我可以将他们的登录 shell 设置为 /bin/false,但这会导致一系列问题无人看管(请参阅此处)——除非可能与sshd配置文件中的一组专用选项(如 noX11Forwarding)相结合,在一个Match节中。
第二个和第三个解决方案的问题是公钥认证“丢失”,即除非客户端-A在启动 ssh 时使用该选项,否则服务器将响应:
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: .ssh/XXXXXX
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_ALL = en_US.UTF-8
debug1: Sending env LANG = en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
因此请求用户密码。这是不可接受的。
我认为nc在代理模式下可以做一些事情,但我似乎无法让它工作。
任何帮助将不胜感激。
解决方案结果是:
在客户端,在.ssh/config:
Host dest
ProxyCommand ssh -q bastion
Run Code Online (Sandbox Code Playgroud)
在服务器端,在sshd_config:
Match Group hopUsers
ForceCommand nc -q0 dest port
Run Code Online (Sandbox Code Playgroud)
服务器上的用户authorized_keys不需要任何command=.
现在,如果用户尝试执行其他操作(例如,在没有 ProxyCommand 的情况下启动 ssh),他们得到的只是 netcat 的输出
$ ssh user@bastion
SSH-2.0-OpenSSH_4.7p1 Debian-8ubuntu1.2
Run Code Online (Sandbox Code Playgroud)
感谢 freenode 上 #openssh 的人们。
| 归档时间: |
|
| 查看次数: |
7610 次 |
| 最近记录: |