如何通过中间机挂载远程 SSHFS?隧道?

如何通过中间机挂载远程 SSHFS?隧道?

我想使用 SSHFS 安装远程文件系统 (A),但有时我有一个 IP 地址,但不允许访问。所以我的计划是通过该网络中的另一台机器 (B) 访问它。我是否需要在 B 上安装 A,然后在本地计算机上安装 B(和 A)?有没有更好的方法?

更新

只是为了澄清程序:

首先,我建一条隧道

ssh -f user@machineB -L MYPORT:machineA:22 -N

然后我挂载远程文件系统

sshfs -p MYPORT [email protected]:/myremotepath /mylocalpath

这是对的吗?

完成后我该如何销毁隧道?

答案1

是的,隧道。你连接机器 B,创建到机器 A 的 SSHd 端口的本地隧道 (-L),然后SSHFS本地主机到新创建隧道的端口。

答案2

您可以使用选项ssh_commandsshfs实现这个效果:

sshfs ma: /mnt -o ssh_command='ssh -t mb ssh'

按照通常的方式卸载

fusermount -u /mnt

抱歉,这晚了 7 年……

答案3

这是我在 HighSierra 10.13.6、SHFS 版本 2.5(OSXFUSE SSHFS 2.5.0)OSXFUSE 3.10.4 上适用的方法。FUSE 库版本:2.9.7

根据上述 Rodrigo Farias 的回答 + clemisch 和 Ohad Rubin 对 -J 选项的评论:

sshfs -p port finalserver_username@finalserver:/path/to/folder/on/finalserver/ /local/mount/point -o ssh_command='ssh -J intermediate_server_username@intermediate_server:port'

答案4

您的连接方案: Your machine --> Host B --> Host A

我们的解决方案将使用 Proxy Jump,在OpenSSH 7.3,因此你需要使用以下命令检查版本是否较新:

ssh -V

那么你需要正确配置你的 ~/.ssh/config。例如,如果机器B可以使用密码登录机器A

machineB
    HostName {machineB ip address}
    User {machineB username}
    Port {machineB port-number}
    IdentityFile ~/.ssh/{machineB private ssh key}

machineA
    ProxyJump machineB
    Hostname {machineA ip address, maybe in local network}
    User {machineA username}
    Port {machineA port-number}

最后,创建挂载点并添加行到 /etc/fstab

machineB:{machineB mount path}  {your local mountpoint}  fuse.sshfs delay_connect,_netdev,user,idmap=user,follow_symlinks,identityfile={local path to machineB private key},default_permissions,uid={local user uid},gid={local user gid} 0 0

相关内容