使用SSHFS自动挂载远程文件夹而没有授予外壳程序访问权限?

问题描述

我在Proxmox内构建了两个VM,我们将它们分别称为A和B,它们都在运行ubuntu 20.04。

对于A,它传递了一个2 TB的SSD,并在引导时安装。我希望系统B在B启动时自动在A中安装一个文件夹(位于/ mnt / SSD / folderB)。为此,我在系统A上添加一个用户remoteB而不授予外壳程序访问权限,并且我将其SFTP访问权限限制在folderB中。这样,我可以使用其他任何系统上的用户“ remoteB”将SFTP传输到系统A。

通过在系统B上安装SSHFS,我能够使用上述配置在系统B上安装驱动器(我遵循了本教程:https://linuxize.com/post/how-to-use-sshfs-to-mount-remote-directories-over-ssh/

然后,我想在系统B引导时自动将其安装在系统B上。在本教程中,我需要在系统A和系统B之间设置“基于SSH密钥的身份验证”。似乎我需要向用户授予外壳程序访问权限才能使上述操作正常进行,我是否误解了?

是否可以在不授予systemA上remoteB Shell访问权限的情况下这样做?

解决方法

基于密钥的身份验证意味着您使用公用/专用密钥文件而不是密码,以便SSH可以对用户进行身份验证,而无需等待启动期间输入密码。如果尚未完成,请从man ssh-keygen开始。将公用密钥复制到/home/user/.ssh/authorized_keys中的A,并将私有密钥复制到B。

无论如何,您都需要A上的有效用户(无论是使用密码还是公共密钥进行身份验证)。

如果仅使用SSH进行隧道和文件传输,则无需授予该用户shell访问权限。您只需在/bin/nologin中将/etc/passwd配置为用户的shell(例如usermod -s /bin/nologin user)就可以实现。请注意,没有外壳,您还需要A的ForceCommand internal-sftp中的sshd_config。有关更多信息,请参见here

要在B上指定私钥,可以在安装选项或IdentityFile中使用.ssh/config ssh选项。请注意,引导过程中的安装是由root完成的。​​

或者,您也可以使用autofs,它将在访问远程文件系统时(而不是在引导过程中)自动挂载。请记住,在引导过程中安装网络共享是有问题的,因为(a)网络可能已关闭,或者(b)网络堆栈可能尚未启动。这可能会导致系统无法启动。有关autofs的更多信息,请参见here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...