我有一台网关机器 (A) 和一台最终机器 (B)。我能够使用 ~/.ssh/config 中的 ProxyCommand 通过 A ssh 和 sshfs 连接到机器 B。我已使用 ssh-copy-id 命令在两台机器上实现无需密码登录。这很有效,我可以从我的机器上执行此操作:
sshfs 用户@B:/home/user mnt
我现在想使用 autofs 按需挂载(我已经对机器 A 上的文件夹执行了此操作),但这似乎不起作用。在本例中,挂载的文件夹是 /mnt。我尝试使用详细和调试选项运行 automount,我看到了以下内容:
handle_packet: type = 3
handle_packet_missing_indirect: token 96, name folder, request pid 6296
attempting to mount entry /mnt/folder
lookup_mount: lookup(file): looking up folder
lookup_mount: lookup(file): folder -> -fstype=fuse,allow_other :sshfs\#user@B\:/home/user
parse_mount: parse(sun): expanded entry: -fstype=fuse,allow_other :sshfs\#user@B\:/home/user
parse_mount: parse(sun): gathered options: uid=1000,gid=1000,fstype=fuse,allow_other
parse_mount: parse(sun): dequote(":sshfs\#user@B\:/home/user") -> :sshfs#user@B:/home/user
parse_mount: parse(sun): core of entry: options=uid=1000,gid=1000,fstype=fuse,allow_other, loc=:sshfs#user@B:/home/user
sun_mount: parse(sun): mounting root /mnt, mountpoint folder, what sshfs#user@B:/home/user, fstype fuse, options uid=1000,gid=1000,allow_other
do_mount: sshfs#user@B:/home/user /mnt/folder type fuse options uid=1000,gid=1000,allow_other using module generic
mount_mount: mount(generic): calling mkdir_path /mnt/folder
mount_mount: mount(generic): calling mount -t fuse -o uid=1000,gid=1000,allow_other sshfs#user@B:/home/user /mnt/folder
st_expire: state 1 path /mnt
expire_proc: exp_proc = 139950775805696 path /mnt
expire_proc_indirect: expire /mnt/folder
笔记:我注意到,当我尝试使用 sshfs 以 /mnt 作为挂载点手动挂载时,即使使用 sudo 也无法做到。
答案1
我找到了发生这种情况的原因。Automount 需要使用 sudo 运行,但 root 没有在 /root/.ssh/config 中设置代理,因此它无法访问机器 B(因为它只能通过机器 A 访问)。一旦我用正确的行更新 /root/.ssh/config(使用 ProxyCommand)并使用 sudo 重新运行 ssh-copy-id 命令,我就能让 autofs 正常工作。我不喜欢回答自己的问题,但我不会删除它,而是把它留在这里,以防别人觉得答案有用,或者万一我错过了更优雅的解决方案。