Существует ли надежный способ принудительного завершения соединений sshfs на уровне пользователя?

Существует ли надежный способ принудительного завершения соединений sshfs на уровне пользователя?

Я хочу, чтобы sshfsсоединения разрывались по истечении некоторого времени, максимум через час, а это означает запуск atкоманды fusermount -uв той же команде или скрипте, которые я использую для запуска sshfsмонтирования.

Однако я заметил, что команда fusermountможет завершиться ошибкой, если файлы используются, хотя я хочу, atчтобы она работала независимо от того, есть ли в соединении еще открытые файлы или нет.

По моему опыту, единственный надежный способ — запустить fusermountкоманды от имени пользователя root или разорвать sshfsсоединение с помощью killкоманды.

Есть ли другой способ принудительного отключения без запуска от имени root? Проблема в том, что я могу не находиться у терминала, когда файлы все еще открыты, но в целях безопасности соединение должно быть разорвано, если я не отменю команду at.

решение1

Если вы хотите только освободить точку монтирования и не заботитесь о завершении соединения SSH, вы можете запустить fusermount -z /mount/point. Это выполнит ленивое размонтирование: точка монтирования больше не связана с монтированием, но монтирование не исчезнет, ​​пока все открытые файлы на этом монтировании не будут закрыты.

Если вы хотите только закрыть SSH-соединение и не заботитесь о монтировании, вы можете просто убить процесс сервера SFTP. В этом и заключается прелесть FUSE: убейте процесс, предлагающий услугу, и он исчезнет. Монтирование не может заблокировать системный ресурс. Процессы, которые попытаются получить доступ к файловым системам, получат ошибку (ENOTCONN ”Transport endpoint is not connected”).

Если вы хотите завершить процессы, у которых открыты файлы в этой файловой системе, вы можете использовать командуfuserкоманда (никакого отношения к FUSE, за исключением того, что F является первой буквой слова «file»).

fuser -k /mount/point

Связанный контент