我使用
ssh server
连接到我的家庭服务器,其中服务器在 ~/.ssh/config
中配置为:
Host server
HostName {server-address}
User me
IdentityFile ~/.ssh/id_rsa
IdentityFile
是受密码保护的私钥,所以我每次登录都必须输入密码。
我可以使用
sshfs me@{server-address}:/home/me /mnt/server
在该服务器上本地安装远程文件系统。再次,我必须输入密码才能使用私钥登录。我注意到我不需要在 sshfs
选项中实际指定密钥 - 大概 ~/.ssh/id_rsa
只是默认位置?
最后,为了轻松安装系统,我将以下行添加到
/etc/fstab
:
me@{server-address}:/home/me /mnt/server fuse.sshfs IdentityFile=/home/me/.ssh/id_rsa,defaults,noauto 0 0
这让我只需运行
mount /mnt/server
即可挂载文件系统 - 当然,我会被要求输入密码。
请注意,我添加了
noauto
选项,以便它不会在启动时安装,因为我担心如果没有密码短语无法安装文件系统,系统会挂起。
我的怀疑就在这里吗?如果系统尝试挂载服务器文件系统但未获得密码,系统是否会无法启动?有没有办法可以向
/etc/fstab
/ mount
命令提供密码,以便它能够在启动时启动文件系统?
我不知道这个“解决方案”是否值得回答,但这是我解决它的方法:
我只是使用
ssh-keygen
生成另一个密钥(即 /home/user/.ssh/id_rsa_no_passphrase
),并且没有给该密钥提供密码。然后我使用 ssh-copy-id
将其上传到我的远程服务器。IdentityFile
字段中的新公钥后,它工作完美,现在在启动时自动挂载文件系统。
这是最终的 fstab 条目:
# sshfs
USER@SERVER:/home/sshfs /mnt/ssh fuse.sshfs defaults,_netdev,allow_other,default_permissions,identityfile=/home/USER/.ssh/id_rsa_no_passphrase,uid=UID,gid=GID 0 0
这可能不是问题的确切解决方案,但它似乎是一个有效的解决方法!
在 ubuntu 20.04 服务器中,这对我有用(一步一步)
安装sshfs
sudo apt-get update
sudo apt-get install sshfs
我创建了密钥对(没有密码),并将其复制到远程服务器
ssh-keygen
ssh-copy-id REMOTE_USER@REMOTE_SERVER
在 /etc/fstab 中添加此行(感谢@Sealad),替换全部大写
REMOTE_USER@REMOTE_SERVER:/home/me /mnt/server fuse.sshfs defaults,_netdev,allow_other,default_permissions,identityfile=/home/USER/.ssh/id_rsa,uid=UID,gid=GID 0 0
用它来获取UID和GID
id -u USER
id -g USER
并且只执行一次(它应该要求您输入远程密码)
sudo mount -a
重新启动系统以检查
我想给出这个问题唯一答案的替代方案。可以从现有私钥中删除密码,而不是创建新的密钥对(这次不保护私钥)。
就做
$ ssh-keygen -p
。删除密码后,fstab 中的 sshfs 可以完美运行。
我最终的 sshfs fstab 是这样的 USER@SERVER:/文件夹/mnt/sshfsmount fusion.sshfs noauto,x-systemd.automount,_netdev,allow_other,IdentityFile=/home/USER/.ssh/id_rsa,重新连接,follow_symlinks 0 0