sshfs总是在fstab中要求输入密码吗?


20

我正在尝试在/ etc / fstab中使用以下行输入sshfs挂载:

sshfs#oli@192.168.0.2:/media/usb0 /media/ExtHD fuse     defaults,nonempty,allow_other 0 0

这样就可以在启动时挂载该卷。引导后,什么都没有发生,但是当我使用命令sudo mount -a时,总是提示我输入密码。我已经设置了SSH密钥并将它们转移到192.168.0.2的计算机上,并且可以在没有密码的情况下登录到常规ssh。如何阻止保险丝询问密码,以便在启动时自动挂载该卷?

如果有帮助,我正尝试从运行Arch Linux的笔记本电脑连接到运行Debian的家庭服务器。谢谢

Answers:


13

基于密钥的身份验证仅在ssh过程可以找到您的密钥的情况下才能起作用。您大概在主目录中有密钥;但您从未告诉过要sshfs在哪里寻找钥匙。在引导时,它将root挂载所有文件系统,因此密钥必须在中/root/.ssh或在中引用/root/.ssh/config

我建议您以自己的用户身份登录后挂载文件系统。将其放在登录时执行的脚本中:

ssh-add ~/.ssh/name_of_key.id_rsa
sshfs homeserver:/media/usb0 ~/exthd

homeserver在您的中放置一个别名~/.ssh/config

Host homeserver
HostName 192.168.0.2
User oli

嗯,这样做是更好的方法,我没想到要把它放在我的登录脚本中。谢谢!
半严肃的2012年

~在安装点上小心使用。如果您使用面板上的启动器图标而不是终端来运行命令,则~可能不会被评估为/home/,命令将失败。
尼克

@Nick如果使用的是GUI,则可能有专用于自动挂载的工具。如果按照我的回答,您将把这两个命令放在一个shell脚本中。启动器图标将运行该脚本。
吉尔斯(Gillles)“所以-别再邪恶了”

10

通过使用以下语法作为标准用户,我可以使用Ubuntu 14.04通过fstab挂载sshfs(请注意,CAPS中的任何内容都是变量,您都可以填写):

USER@HOST:/REMOTE_DIR /LOCAL_DIR fuse.sshfs delay_connect,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID,gid=USER_GID 0 0

这是对信息的组合在这里找到/superuser/669287/automount-sshfs-using-fstab-without-mount-a并添加delay_connect从这里/ubuntu/ 326977 / sshfs不会自动在启动时安装etc-fstab-configuration

我使用了本教程来获取我的USER_ID和USER_GID:https ://kb.iu.edu/data/adwf.html

要在Unix中查找用户的UID或GID,请使用id命令。要查找特定用户的UID,请在Unix提示符下输入:

id -u username

用适当的用户名替换用户名。要查找用户的GID,请在Unix提示符下输入:

id -g username

另外,如果您需要完整的教程,它将发布在https://www.variux.com/sshfs-automount-at-boot-with-fstab-on-ubuntu-14-04/


该链接:variux.com/blog/?p=161似乎不再起作用...
Christian Casutt

@ChristianMuggli感谢您的评论。我已经更新了完整的教程地址。但是,我很长一段时间都没有测试过该教程。variux.com/sshfs-automount-at-boot-with-fstab-on-ubuntu-14-04
variuxDavid

5

我有同样的问题。

我以前通过设置了ssh密钥ssh-keygen,然后ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.100

ssh可以正常工作而不要求我输入密码,所以我对为什么sshfs仍然想要密码感到困惑...

也就是说,

ssh root@192.168.0.100 

工作正常,但是当我键入时,sshfs仍然要求输入密码

sudo sshfs root@192.168.0.100:/home/raspberry/Videos /home/pi/LinuxMintMountedFolder/ -o allow_other

正如上面的Gilles所解释的,sshfs正在根目录中寻找必要的密钥。

因此,我通过将文件id_rsa和id_rsa.pub从主文件夹的隐藏.ssh文件夹复制到根目录的.ssh文件夹(即

cp /home/pi/.ssh/id_rsa /root/.ssh/
cp /home/pi/.ssh/id_rsa.pub /root/.ssh/

然后,键入以下命令即可工作,而无需打扰我输入密码:

sudo sshfs root@192.168.0.100:/home/raspberry/Videos /home/pi/LinuxMintMountedFolder/ -o allow_other

从安全角度来看,这确实很糟糕。最好为root创建一组单独的密钥,并将其也添加到authorized_keys。您永远不应该复制私钥。
Christian Wolf

3

如果希望它在没有密码的情况下启动,则需要创建一个没有密码的公共/私有ssh密钥。不建议结束,但是您至少可以以chmod 400root用户身份保护这些文件。

之后,像往常一样,您需要将公共密钥复制到安装点:

ssh-copy-id -i my_new_key.pub oli@192.168.0.2

而且,您需要告诉sshfs使用此密钥。

oli@192.168.0.2:/media/usb0 /media/ExtHD fuse     defaults,nonempty,allow_other,'IdentityFile /path/to/private/key' 0 0

2
SSHFS version 2.8 fuse: unknown option 'SSHOPT=IdentityFile /home/ravi/.ssh/id_boxy_rsa'
汤姆·黑尔

1
@TomHale而不是,SSHOPT='IdentityFile /path/to/private/key'简单地,IdentityFile /path/to/private/key
-pulkitsinghal

2

在Debian 8.2上为我完美地工作,将以下行添加到fstab

user@hostname:/path/to/localmountpoint /path/to/remotemountpoint fuse.sshfs _netdev,user,port=(if_not_22),idmap=user,transform_symlinks,identityfile=/home/user/.ssh/id_rsa,allow_other,default_permissions,uid=user_id,gid=group_id 0 0

主机名指示远程服务器(要从中进行装载的文件夹)用户在本地和远程都相同。(更轻松)

确保已在本地创建了供用户使用的ssh密钥,ssh-keygen并用于ssh-copy-id将密钥复制到远程服务器(主机名)。

你可以找到user_idgroup_id在本地服务器的用户/etc/passwd

还要确保用户在文件夹中具有读/写权限path/to/localmountpoint


2

实际上,您可以使用password_stdin选项在启动时安装没有公共密钥的SSHFS,但不能使用fstab。

您需要的是一个小的脚本文件和cron。

请注意,公钥始终是一个更好的选择。但是有时公钥不起作用(我本人曾几次遇到该问题)。请注意,脚本文件将以纯格式包含密码。因此,您应确保只有root用户对此文件具有任何权限!

脚本文件如下所示:(/root/automount.sh):

#!/bin/sh
if [ $(mount | grep 'user@server:/folder' | wc -l) -ne 1 ]
then
    echo 'PASSWORD' | sshfs user@server:/folder /mnt/mountpoint -o password_stdin,allow_other
    echo 'SSHFS has been mounted.'
else
    echo 'SSHFS is already mounted.'
fi

要在启动时运行此程序,可以使用crontab作为root用户并输入以下行:

@reboot /root/automount.sh

如上所述,您应该确保绝对没有人可以读取该文件,因为它包含纯文本密码!

-rwx------ 1 root root 526 Nov 21 12:57 automount.sh

现在,每次重新启动后,系统将使用凭据自动安装SSHFS。


0

有同样的问题。最后,它帮助将类型设置为简单保险丝,或者(更可能是)将选项截断为:

fuse reconnect,idmap=user,allow_other,default_permissions

最终对我有用


0

如果你试图连接到不支持密钥的服务器,你还希望它是自动的,你可以使用sshpass,即使您在您的密码输入sshfs,甚至在fstab

例如,如果您将类似的内容放入/etc/fstab

sshfs#username@host:/  /mnt/here   fuse   auto,ssh_command=sshpass\040-f\040/root/.ssh/host.password\040ssh  0  0

然后将密码输入在中指定的文件名中/etc/fstab

echo 'secret' > /root/.ssh/host.password

确保已安装sshpass

pacman -S sshpass  # if you're using Arch Linux

然后它应该工作:

mount /mnt/here

您可能需要先ssh访问服务器以确认其密钥,但是此后无需手动交互即可工作,并且带有auto标志的服务器fstab应在引导时挂载,而无需手动输入密码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.