问题描述
我在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。