sas*_*n13 3 linux ssh proxy sftp
我正在尝试使用自动跳转盒为我们的用户设置 SSH 代理。用户登录并自动通过 SSH 连接到他的容器/虚拟机,效果非常好。遗憾的是,通过它建立隧道的 SFTP 却没有。我确信这与我的设置方式有关,因为它基本上只是管道术语返回而不是正确地进行隧道挖掘。
/etc/密码
redtest:x:1002:1002::/home/redtest:/usr/bin/redtest
Run Code Online (Sandbox Code Playgroud)
/usr/bin/redtest
#!/bin/bash
/usr/bin/ssh redtest -t -F ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)
/home/redtest/.ssh/config
Host redtest
HostName redtest1
User root
IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
设置这样的事情的正确方法是什么,或者这是否可能?登录与容器是一对一的。感谢正确方向的推动!
当远程 ssh 客户端请求在服务器上运行命令时,OpenSSH 服务器会使用“-c”选项启动本地用户的 shell 来运行该命令。它的运行相当于:
$SHELL -c 'the requested command'
Run Code Online (Sandbox Code Playgroud)
例如,如果远程用户运行:
ssh user@somehost 'rm -rf /'
Run Code Online (Sandbox Code Playgroud)
和“user@somehost”/bin/bash作为他的外壳,那么服务器将运行相当于:
/bin/bash -c 'rm -rf /'
Run Code Online (Sandbox Code Playgroud)
SFTP 稍微复杂一些,但最终结果是一样的。远程客户端请求服务器运行“sftp”子系统。在服务器的sshd_config文件中,您可能有这样一行:
Subsystem sftp /path/to/sftp-server
Run Code Online (Sandbox Code Playgroud)
该行表示“当客户端请求‘sftp’子系统时,运行 /path/to/sftp-server”sftp-server是 OpenSSH 中包含的一个程序,它实现了 SFTP 协议的服务器部分。因此,当 ssh 客户端连接并请求 sftp 子系统时,服务器最终运行:
$SHELL -c /path/to/sftp-server
Run Code Online (Sandbox Code Playgroud)
(有一种特殊情况称为“internal-sftp”,我不会在这里讨论。)
现在,您已经编写了一个名为 的脚本/usr/bin/redtest并将其设置为用户的 shell。因此,当远程用户尝试运行 sftp 时,服务器最终将运行:
/usr/bin/redtest -c /path/to/sftp-server
Run Code Online (Sandbox Code Playgroud)
您的redtest脚本忽略其命令行,仅启动到目标服务器的普通 ssh 会话。它从不在目标服务器上运行 sftp-server 程序。
sftp-server要实现此功能,您需要在以这种方式运行 redtest 时在目标主机上启动 redtest 。如果您对用户在目标主机上运行的内容不太挑剔,那么类似这样的事情应该可以工作:
#!/bin/bash
if [ "$1" = "-c" ]
then
/usr/bin/ssh redtest -F ~/.ssh/config "$2"
else
/usr/bin/ssh redtest -t -F ~/.ssh/config
fi
Run Code Online (Sandbox Code Playgroud)
这将传递客户端请求的任何命令,而不仅仅是 sftp。这应该不是问题,因为无论如何用户显然都可以通过 root 命令行访问目标服务器。
sftp-server如果跳转主机和目标主机的程序不在同一位置,您可能会遇到问题。跳转主机上的 ssh 服务器将尝试使用跳转主机配置中的路径运行 sftp-server,这对于目标主机可能不正确。您必须确保sftp-server可以使用跳转主机的 sshd_config 中的路径在目标主机上调用。
如果您想让redtest脚本更加复杂,您可以安排它在远程用户尝试运行 sftp 时运行如下所示的内容:
/usr/bin/ssh redtest -F ~/.ssh/config -s sftp
Run Code Online (Sandbox Code Playgroud)
和-s参数sftp专门请求在目标主机上运行 sftp 子系统。
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |