![gvfs-挂载自动密码](https://linux22.com/image/52260/gvfs-%E6%8C%82%E8%BD%BD%E8%87%AA%E5%8A%A8%E5%AF%86%E7%A0%81.png)
我想为 gvfs 挂载创建快捷方式(我更喜欢从 shell 挂载)。为此,不必输入ftp://
和sftp://
连接的密码是非常必要/方便的。目前我知道的唯一方法是:
echo 12345 | gvfs-mount sftp://[email protected]/
尽管我可以授予该文件的权限700
(甚至可以授予该文件的权限100
),但我不确定它是否相当安全。比.netrc
物品还差吗?我知道ssh-copy-id
,但我无法访问大多数sftp
服务器上的 shell。
我的方法有更好的(标准)替代方案吗?他们存储密码时会做nautilus
什么?caja
答案1
我和你一样,我喜欢从命令行挂载/卸载我的文件系统。
关于标准输入选项
我不确定它是否相当安全。它比 .netrc 项目差吗?
您应该知道,在许多系统上,进程名称和命令行参数对所有用户都是可见的。例如,在 Linux 中,执行grep -a . /proc/*/cmdline
此操作即可查看全部内容。
也就是说,在包括 bash 在内的某些 shell 中,echo
这是一个内置命令,因此不会启动任何进程。
所以,据我所知,应该不会比.netrc
。无论如何,请仔细检查您的文件权限。
SFTP
gvfs-mount sftp://somehost/somepath
您无需密码即可工作。 (我刚刚测试成功。)
推荐的解决方案是使用基于密钥的身份验证,而不是在任何地方存储任何密码。
例如,参见身份验证 - 如何设置无密码 SSH 登录? - 询问Ubuntu和将 ssh 密钥复制到另一台机器的最简单方法? - 询问Ubuntu(它是为 Ubuntu 编写的,但对于其他 Unices 的工作方式相同)。
我知道 ssh-copy-id,但我无法访问大多数 sftp 服务器上的 shell。
ssh-copy-id 只是一个方便的快捷方式。您不需要 shell 访问权限来设置基于密钥的身份验证,但您确实需要访问您的主目录。
如果您可以通过 SFTP 交互地访问您的文件,那么您很可能可以设置~/.ssh/
和~/.ssh/authorized_keys
,除非管理员小心翼翼地阻止了这一点,但这将是搬起石头砸自己的脚。实际上管理员应该鼓励用户设置基于密钥的身份验证。看看他们有什么政策。
如果您只需要设置一个密钥,则只需复制您的民众上面(可能)生成的(非私有)密钥文件到名为~/.ssh/id_rsa.pub
目录中的远程文件并设置权限(对您来说是读写,对其他人没有任何影响)。.ssh
authorized_keys
600
文件传输协议
关于 ftp url,传统的答案是使用 a~/.netrc
如解释的,例如https://askubuntu.com/a/359802/68124。
唉,它与无数的 ftp 客户端(新旧)配合得很好,包括curlftpfs
,但(至少在 Ubuntu 14.04 上)gvfsmount
忽略它。
也许curlftpfs
适合您的用例。主要区别在于您选择挂载点而不是gvfs-mount
计算挂载点。
curlftpfs ftp://host/ ~/mymountpoint
再次使用 SFTP
如果您喜欢这个curlftpfs
选项,您可以考虑您的 sftp 网址,
sshfs host:/some/remote/path ~/myothermountpoint
如果想知道 sshfs 是否需要 shell 访问,维基百科说:客户端通过 SSH 文件传输协议 (SFTP) 与远程文件系统交互,[2]
最后一句话:对于需要显式安装点的工具,请考虑首先在正确的路径创建一个空目录。如果您尝试多次或更改选项,请记住fusermount -u somepath
在尝试再次安装之前先卸载。
答案2
您可以使用类似的方法expect
在每次连接时提供凭据。它不是超级安全,但可以满足您的需求。
#!/usr/local/bin/expect --
set timeout -1
spawn gvfs-mount {args}
expect "User"
send "joe\n"
expect "Password:"
send "xxxxx\n"
expect eof