У меня есть автономный сервер под управлением 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.
sudo su
или sudo
. Вы можете просто использовать /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
Примечания:
Источник: https://linuxconfig.org/how-to-automatically-execute-shell-script-at-startup-boot-on-systemd-linux