所以我正在尝试做一些事情相对地理论上很简单,但我的用例似乎很难找到,因为大多数代理我在互联网上找到了有关通过 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 实现供选择。