通过 SSH 代理为 Samba 建立 SSH 隧道

通过 SSH 代理为 Samba 建立 SSH 隧道

所以我正在尝试做一些事情相对地理论上很简单,但我的用例似乎很难找到,因为大多数代理我在互联网上找到了有关通过 SSH 隧道为您的浏览器设置代理的信息。

我想做的是在我的 Mac 上设置一个映射驱动器,指向我可以通过 SSH 访问的 Linux 机器。我在网上找到了一些有用的资源,包括作者建议如下:

sudo ifconfig lo0 127.0.0.2 alias up
sudo ssh -NL 127.0.0.2:139:localhost:139 \
         -NL 127.0.0.2:445:localhost:445 \
         user@ssh-host

据我了解,看起来很好……但是,我的设置只是稍微复杂一点。这假设您有对盒子的直接 SSH 访问权限。我的情况是,我通过另一台机器连接到我的机器。因此,我的 ~/.ssh/config 如下所示:

Host *.dev
  User jmurray
  IdentityFile ~/.ssh/my_dev_identity_file
  ProxyCommand ssh -A proxy_box nc %h %p

因此,当我通过 ssh 进入jmurray.dev(目标 Linux 机器)时,我将直接通过服务器proxy_box。我应该提到,此网络配置不在我的控制范围内,因此请不要建议更改网络配置本身。

因此,从前面提到的教程来看,第一个命令运行良好(当然),但第二个命令:

sudo ssh -NL 127.0.0.2:139:localhost:139 \
         -NL 127.0.0.2:445:localhost:445 \
         [email protected]

错误:

sh: Could not resolve hostname jmurray.dev: nodename nor servname provided, or not known

因此,我在这里仅假设当我发出此请求时它没有读取我的配置文件。因此,我决定通过命令行使用略微修改后的版本向其提供我的配置:

sudo ssh -NL 127.0.0.2:139:localhost:139 \
         -NL 127.0.0.2:445:localhost:445 \
         [email protected] \
         -o 'User jmurray' \
         -o 'IdentityFile ~/.ssh/my_dev_identity_file' \
         -o 'ProxyCommand ssh -A proxy_box nc %h %p'

但后来我得到了一个单独的错误:

Permission denied (publickey,gssapi-with-mic).
ssh_exchange_identification: Connection closed by remote host

所以……这就是我被困住的地方。我觉得这应该是可能的。如果我可以从本地机器上用一个命令 ssh 进入盒子,那么我觉得应该可以从本地机器上用一个命令设置我的隧道。而且由于这proxy_box是一台共享机器,我真的想远离任何需要我以 root 身份在该盒子上操作的解决方案。

在此先感谢大家的帮助!非常感谢!

答案1

运行ssh意味着sudo您以 root 身份运行它,因此它不是使用您的 .ssh/config 而是使用 root 的。

在非特权端口上运行 ssh 连接,然后运行额外的 SSH 代理连接以localhost转发特权端口。

好的,举个例子,除了执行正常的 SSH 之外:

ssh -NL 127.0.0.2:10139:localhost:139 \
    -NL 127.0.0.2:10445:localhost:445 \
     user@ssh-host

你还可以运行这个本地 ssh:

sudo ssh -NL 127.0.0.2:139:127.0.0.2:10139 \
         -NL 127.0.0.2:445:127.0.0.2:10445 \
         $USER@localhost

因此,您可以避免在真实的 SSH 连接中绑定到特权端口 139 和 445,而仅在本地连接中将它们绑定到您自己的机器。

然而,所有这些对于访问文件来说似乎都需要付出一些努力,应该有适合 Mac 的 SSHFS/SFTP 实现供选择。

相关内容