我想使用 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_command
来sshfs
实现这个效果:
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