我正在尝试通过 sshfs 和 pam-mount 设置一个集中式主目录服务器。
目前我陷入了这样的境地:
当尝试挂载远程主目录时,sshfs 卡住了:
d_inevitable@laptop:~$ sshfs -o nonempty,debug server: .
FUSE library version: 2.9.0
nullpath_ok: 0
nopath: 0
utime_omit_ok: 0
此时一切就冻结了。
这似乎是因为主目录包含~/.ssh
。所以当我尝试时,sshfs -o nonempty server:.ssh .ssh
同样的事情发生了。
我猜想 fuse 会以某种方式初始化挂载,但随后 ssh 需要从其配置目录中获取某些内容,因此它会尝试从中读取。Fuse 只会阻止该读取,从而导致死锁。
sshfs 需要什么东西~/.ssh
?
我尝试删除所有读/写权限~/.ssh
,然后挂载到其他目录。这很有效。调试输出仅抱怨写入.ssh/known_hosts
。
答案1
您说得对,fuse 首先启动挂载,然后启动 ssh 进程。这会给您带来问题,因为默认情况下 ssh 读取~/.ssh/ssh_config
,~/.ssh/known_hosts
,~/.ssh/id_*
来自用户主目录的文件。此行为可以更改:
~/.ssh/ssh_config
是默认的每用户配置文件。可以使用-F
选项指定备选的每用户配置文件,或者使用-F /dev/null
指定无每用户配置文件。~/.ssh/known_hosts
用于存储和检查主机密钥。您可以使用-o UserKnownHostsFile=/dev/null
,然后手动将主机密钥添加到/etc/ssh/ssh_known_hosts
或使用-o StrictHostKeyChecking=no
。~/.ssh/id_*
文件默认为用于客户端身份验证的身份文件。如果要使用身份文件进行身份验证,则需要将其保存在主目录之外并使用-o IdentitiesOnly=yes -o IdentityFile=<path to private key>
。或者,如果使用,则可以进行交互式身份验证-o IdentitiesOnly=yes -o IdentityFile=/dev/null -o PubkeyAuthentication=no
。
例如,使用 sshfs 挂载主目录,使用密码进行身份验证,不检查主机密钥,运行
sshfs user@server: ~/ -o nonempty -F /dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -o IdentityFile=/dev/null -o PubkeyAuthentication=no