Автоматическое монтирование тома sshfs через fstab с аутентификацией пароля

У меня есть автономный сервер под управлением 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

При интерактивном монтаже запрашивается пароль. Мне нужно, чтобы сервер мог восстанавливаться после перезагрузки, без присутствия кого-либо, кто бы присматривал за ним и вводил пароль, поэтому он должен работать без каких-либо подсказок. Я не знаю, как получить пароль, кроме приглашения. В идеале я мог бы указать файл учетных данных с именем пользователя и паролем, как я могу с опцией credentials=<file name> cifs.

Я пробовал credentials= и password= в качестве параметров монтирования, но они, похоже, не определены для sshfs; Я получаю fuse: unknown option.

Существует опция password_stdin для sshfs, но я не уверен, как это применимо в fstab.

5
задан 29 May 2014 в 00:21

1 ответ

  • В этом примере я подразумевал, что мы работаем как root. Если нет, при необходимости примените sudo su или sudo.
  • Ваша система может использовать другую систему инициализации, чем Systemd, но Cron довольно универсален.

Вы можете просто использовать /etc/fstab, чтобы предварительно определить параметры монтирования и так далее.

Пример:

USERNAME@HOSTNAME_OR_IP:/REMOTE/DIRECTORY /LOCAL/MOUNTPOINT fuse.sshfs  defaults,password_stdin,_netdev 0 0

Имейте в виду, что параметры монтирования по умолчанию далеки от совершенства.
Например: повторное подключение важно. см.: 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

После того, как это будет сделано, вам понадобится простой скрипт с этим единственное содержимое, такое как:

#!/bin/bash
echo "passwordgoeshere" | mount /mnt/srv

Давайте сохраним его под вашим пользователем root, например: /root/mount_sshfs.sh
Теперь вам нужно сделать его исполняемым: chown +x /root/ mount_sshfs.sh

Теперь все, что вам нужно, это просто cron или systemd, чтобы выполнить это при монтировании.
С cron простая запись вроде этой работает:
@reboot /root/mount_sshfs.sh

С Systemd:
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

Примечания:

  • Я не тестировал метод Systemd, так как стараюсь не полагаться на нем как можно больше. Это личная неприязнь/нелюбовь/ненависть. :)
  • С помощью Cron вам может понадобиться добавить в скрипт "сон", чтобы он не пытался запустить скрипт "слишком рано", т.е.: до появления интернета/сети.

Источник: https://linuxconfig.org/how-to-automatically-execute-shell-script-at-startup-boot-on-systemd-linux

2
ответ дан 25 March 2020 в 12:49

Другие вопросы по тегам:

Похожие вопросы: