我正在使用 Ubuntu 22.10“Kinetic Kudu”,并尝试按照在线获得的说明通过 sshfs 挂载文件夹:
sudo sshfs -o allow_other,default_permissions server@address:~/ /home/user/Documents/folder
然后sudo nano /etc/fstab
我添加以下行:
server@address:~/ /home/user/Documents/folder fuse.sshfs noauto,x-systemd.automount,_netdev,reconnect,identityfile=/home/user/.ssh/id_rsa,allow_other,default_permissions 0 0
我不确定“ user
”identityfile=/home/user/.ssh/id_rsa
是本地机器的用户还是服务器的用户?
一切最初连接良好,但重启后文件夹变空了。
知道如何解决这个问题吗?
PS:我是新手sshfs
,我通过教程获得了说明www.digitalocean.com 如何使用 SSHFS 通过 SSH 挂载远程文件系统。
答案1
您说的是,但实际上说或server@address
会更清楚。当使用等时, 之前的部分是您正在验证的用户。user@server
user@address
ssh
@
例如,您可以在中设置以下主机条目~/.ssh/config
:
Host servername
Hostname 192.168.1.102
User banana
默认情况下,如果您ssh servername
,您将以当前本地用户名进行连接。使用此ssh
配置,如果您ssh servername
,您将以 的身份连接到 192.168.1.102 banana
,但即使使用此设置,如果您ssh apple@servername
,您也会以 的身份进行连接apple
。
您的问题因以下事实而更加严重:在 中的挂载fstab
由本地系统上的 root 用户运行。这意味着,以普通用户身份进行的所有设置都将无济于事。例如,当您ssh servername
第一次登录时,您会接受远程服务器的公钥。这仅以该用户身份发生,如果您sudo su -
登录root
并以 root 身份运行,您将获得相同的提示。这是首次在 中ssh servername
设置时的另一个常见问题。sshfs
fstab
公钥中的标识符与身份验证无关。它只是文本,用于在密钥被盗用时帮助您识别远程服务器上的特定密钥。生成密钥时,应使此标识符与使用该密钥的机器相关。这样,如果机器被盗用,您可以从所有服务器中删除此特定密钥,而无需删除其他/所有密钥,从而帮助您保持访问权限而不会失去所有访问权限。
更多细节:SSH 客户端配置
重启后,如果运行mount
,您应该会看到所有已安装的驱动器。我猜您不会看到这个,因为目录是空的。只想提一下,与成功安装一个空目录相比。
您的驱动器可能未安装,因为您noauto
的fstab
配置不正确,并且x-systemd.automount
无法正常工作。
sudo systemctl daemon-reload
对 进行更改后,请务必运行fstab
。
你可以尝试mount /home/user/Documents/folder
看看是否能得到具体错误。
如果没有出现错误,它已安装,并且您看到了文件,那么很可能就是这种情况。
此外,您有allow_other
,但您没有user
选择。
驱动器可能已安装,但您无权rx
列出文件。这就是user
、uid
和gid
发挥作用的地方。
user@server /mnt/sshfsshare fuse.sshfs user,_netdev,noauto,defaults,rw,x-systemd.automount,x-systemd.device-timeout=2s,Compression=no,cache=yes,kernel_cache,reconnect,uid=1000,gid=1000,idmap=user,allow_other,IdentityFile=/home/user/.ssh/id_rsa 0 2
你设置的是identityfile
,我总是将其输入为IdentityFile
,但我认为大小写无关紧要。这意味着即使 root 运行挂载,它也知道访问你的密钥。你甚至正确地使用/home/user
和不是 ~/
在 IdentityFile 路径中。
唯一可能出现问题的情况是您的密钥文件已加密/受密码保护。在这种情况下,挂载将失败,因为您没有输入密码。