使用密码 auth 通过 fstab 自动挂载 sshfs 卷

Chr*_*ith 6 server fstab mount sshfs fuse

我有一个运行 Ubuntu 12.04.4 的无头服务器,它需要在没有用户干预的情况下重新启动后重新启动。现有的手动过程涉及通过 sftp 查看远程服务器上的文件并操作某些文件。sftp 站点的身份验证使用用户名和密码。我想通过直接在需要文件的服务器上安装远程卷来删除进入 sftp 服务器的手动步骤,从而自动执行此过程。

请注意,我没有 ssh 身份文件,因为未使用基于密钥的身份验证。我无法更改远程端以使用密钥身份验证;我需要使用现有的用户名和密码。我在那里发现的大多数指南只涉及使用基于密钥的身份文件。

当前的 fstab 配置:

sshfs#username@secureftp.example.net:/SecureFTP /my/localpath fuse allow_other,uid=root,gid=clientfiles,umask=0770
Run Code Online (Sandbox Code Playgroud)

以交互方式挂载时,它会提示输入密码。我需要服务器能够从重新启动中恢复,而无需有人照看并输入密码,因此它需要在没有任何提示的情况下工作。除了提示之外,我不知道如何获取密码。理想情况下,我可以像使用credentials=<file name> cifs选项一样指定一个带有用户名和密码的凭证文件。

我已经尝试过credentials=password=作为安装选项,但它们似乎没有被定义为sshfs; 我明白了fuse: unknown option

password_stdinsshfs有一个选项,但我不确定它如何应用于 fstab。

Apa*_*che 3

  • 在这个例子中,我暗示我们以 root 身份工作。如果没有,请申请sudo susudo在需要时申请。
  • 您的系统可能使用与 Systemd 不同的 init 系统,但 Cron 非常通用。

您可以简单地使用/etc/fstab来预先定义您的安装选项等等。

例子:

USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs  defaults,password_stdin,_netdev 0 0
Run Code Online (Sandbox Code Playgroud)

请记住,默认安装选项远非完美。
例如:重新连接很重要。请参阅: https: //github.com/libfuse/sshfs/issues/101

包含这些选项的示例(取自 Github 问题):

sshfs#user@storage.cz:/content/ /mnt/srv fuse   password_stdin,defaults,user,allow_other,reconnect,delay_connect,ConnectTimeout=5,ServerAliveInterval=5,IdentityFile=/root/.ssh/id_rsa_storage 0 0
Run Code Online (Sandbox Code Playgroud)

完成后,您需要一个包含此唯一内容的简单脚本,例如:

#!/bin/bash
echo "passwordgoeshere" | mount /mnt/srv
Run Code Online (Sandbox Code Playgroud)

让我们将其保存在您的根用户下,举个例子:/root/mount_sshfs.sh
现在您需要使其可执行:chmod +x /root/mount_sshfs.sh

Timeout waiting for prompt错误:您应该尝试运行该脚本一次以查看其是否有效。如果它没有退出并且您最终收到错误,请尝试以 root 身份Timeout waiting for promptssh 进入远程主机。如果您以前从未这样做过,sshfs 将提示将主机添加到文件中,此时脚本将等待响应,直到达到超时。known_hosts

现在您所需要的只是cronsystemd在挂载时执行此操作。
对于cron,像这样的简单条目就可以工作:
@reboot /root/mount_sshfs.sh

使用系统:

  1. 您必须创建脚本。参见上面。

  2. 您必须创建一个新的 Systemd 服务脚本。
    一个例子是:/etc/systemd/system/mount_network.sh

  3. 文件内容:

    [Unit]
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    ExecStart=/root/mount_sshfs.sh
    
    [Install]
    WantedBy=default.target
    
    Run Code Online (Sandbox Code Playgroud)

笔记:

  • 我没有测试 systemd 方法,因为我尽量不依赖它。这是个人喜好。
  • 使用 cron,您可能需要在脚本中添加“睡眠”,这样它就不会尝试“太早”运行脚本,即:在互联网/网络出现之前。

来源: https: //linuxconfig.org/how-to-automatically-execute-shell-script-at-startup-boot-on-systemd-linux