Início
» LINUX
»
Como montar um diretório SSHFS remoto automaticamente na inicialização do Debian.
Como montar um diretório SSHFS remoto automaticamente na inicialização do Debian.
Você configura uma montagem SSHFS, confirma que funciona, reinicia o Debian e, de repente, o diretório remoto está vazio novamente. O comando manual funcionou porque você estava logado, a rede já estava online e o SSH podia solicitar confirmação de senha ou chave de host, se necessário. Montagens feitas durante a inicialização não oferecem essas facilidades.
A solução confiável é tornar a autenticação SSH não interativa, criar uma /etc/fstabentrada persistente e informar ao systemd que o sistema de arquivos depende da rede. Este guia começa com a configuração funcional mais simples e, em seguida, adiciona opções para redes lentas e interrupções de sessões SSH. Os exemplos usam `/var/www/html` user@server.example.com:/srv/datacomo diretório remoto e `/usr /mnt/remote/local/bin` como ponto de montagem local.
A página de pacotes do Debian lista atualmente o SSHFS 3.7.3 para o Debian 12 (Bookworm), e o SSHFS utiliza o subsistema SFTP fornecido pelo SSH. Consulte a página de pacotes do SSHFS no Debian e o manual do SSHFS . As revisões dos pacotes variam entre as versões do Debian, mas a abordagem de montagem de inicialização descrita abaixo baseia-se no comportamento padrão do fstab e do systemd.
Por que uma montagem SSHFS funciona manualmente, mas falha na inicialização?
A maioria das falhas ocorre por três motivos. Primeiro, o SSH ainda pode exigir uma senha, frase secreta ou confirmação da chave do host na primeira conexão. Um processo de inicialização não possui um terminal onde possa responder a essas solicitações. Segundo, a montagem pode ser iniciada antes que a rede ou o DNS estejam totalmente operacionais. Terceiro, uma conexão SSH de longa duração pode se tornar obsoleta após uma interrupção de rede.
A documentação do systemd do Debian explica que a _netdevopção força uma montagem a ser tratada como uma montagem de rede. As montagens de rede são ordenadas após network-online.target. A mesma documentação observa que /etc/fstabas entradas são convertidas em unidades de montagem nativas do systemd na inicialização. Veja systemd.mount(5) no Debian .
1. Instale o SSHFS e crie o ponto de montagem.
Instale o cliente SSHFS incluído e crie o diretório local que irá expor os arquivos remotos:
O SSHFS é baseado no FUSE, a interface de sistema de arquivos em espaço de usuário do Linux. No Debian 12, o sshfspacote depende do FUSE 3 e do cliente OpenSSH.
Instale o pacote SSHFS e crie o diretório local que se tornará o ponto de montagem.
2. Configure a autenticação SSH que pode ser executada sem prompt.
Para uma montagem em todo o sistema iniciada pelo systemd, uma chave dedicada pertencente ao root é simples, pois o auxiliar de montagem é executado como root. Gere uma chave sem senha somente se a própria máquina for confiável e a chave for restrita a essa finalidade.
Se o comando for concluído com sucesso, sem exibir nenhuma mensagem, a autenticação está pronta para a inicialização. Se for solicitada a confirmação da impressão digital do servidor, conecte-se interativamente como root, verifique a impressão digital em uma fonte confiável e aceite-a. Não contorne erros de chave do host desativando a verificação do host.
O OpenSSH documenta BatchMode=yesespecificamente scripts e trabalhos em lote porque desativa as solicitações de senha e confirmação. As chaves do host são verificadas no known_hostsarquivo do usuário. Consulte o manual do ssh(1) do Debian e ssh_config(5) .
Prepare o acesso SSH baseado em chave e verifique se a conexão pode ser estabelecida com sucesso sem entrada interativa.
3. Confirme manualmente a montagem do SSHFS antes de editar o fstab.
Não depure a ordem de inicialização até que o comando SSHFS básico funcione. Monte o diretório uma vez usando a mesma chave:
Verifique se consegue listar os arquivos remotos e, em seguida, desmonte-os antes de testar o fstab:
ls -la /mnt/remote
sudo fusermount3 -u /mnt/remote
O manual do SSHFS recomenda reconnecto restabelecimento de conexões interrompidas. Ele também explica que isso ServerAliveIntervalpode evitar uma montagem aparentemente congelada quando uma conexão SSH ociosa é silenciosamente encerrada. Com um intervalo de 15 segundos e a contagem padrão do OpenSSH de três sondagens não respondidas, uma conexão inativa é detectada em aproximadamente 45 segundos; aqui, a contagem é escrita explicitamente para que o comportamento seja óbvio.
4. Adicione uma entrada SSHFS persistente em /etc/fstab
O fuse.sshfssubtipo é reconhecido pelas ferramentas de montagem do Debian. O manual upstream do SSHFS também o documenta sshfscomo um tipo de sistema de arquivos fstab e notas para compatibilidade. O manual fstab(5)fuse.sshfs do Debian descreve os seis campos do fstab e recomenda a notação de subtipo de sistema de arquivos, como .fuse.sshfs
Opção
Por que está aqui?
_netdev
Faz com que o systemd trate a montagem como dependente da rede.
IdentityFile=...
Seleciona a chave privada explicitamente, em vez de depender de um agente interativo.
BatchMode=yes
Falha em vez de aguardar uma senha ou solicitação de confirmação.
reconnect
Permite que o SSHFS restabeleça uma conexão interrompida.
ServerAliveInterval=15
Envia sondagens keepalive em nível SSH durante períodos de inatividade.
ServerAliveCountMax=3
Limita as tentativas de keepalive sem resposta antes de desconectar o SSH.
default_permissions
Permite a verificação de permissões locais, além da autorização remota.
Adicione a montagem SSHFS ao /etc/fstab com opções explícitas de rede, identidade e reconexão.
5. Teste a entrada do fstab antes de reiniciar.
/etc/fstabÉ muito mais fácil corrigir um erro de digitação antes de reiniciar. Peça ao systemd para recarregar as unidades de montagem geradas e, em seguida, teste a entrada:
sudo systemctl daemon-reload
sudo mount -a
findmnt -T /mnt/remote
ls -la /mnt/remote
Se mount -anão retornar nenhum erro e findmntreportar , a sintaxe do fstab é aceita e o sistema de arquivos é montado. O manual mount(8)fuse.sshfs do Debian confirma que monta sistemas de arquivos fstab exceto entradas marcadas .mount -anoauto
Antes de reiniciar, verifique a entrada do fstab com os comandos `mount -a`, `findmnt` e a unidade de montagem do systemd gerada.
E se a rede não estiver pronta a tempo?
_netdevO systemd obtém a semântica de ordenação correta, mas network-online.targetsua precisão depende da qualidade do serviço de gerenciamento de rede que o fornece. Wi-Fi, VPNs, atrasos no DHCP, atrasos no DNS e configurações de rede incomuns ainda podem tornar a montagem imediata do sistema operacional instável.
Nesse caso, use a montagem automática do systemd para que o processo de inicialização crie um ponto de montagem automática e estabeleça a conexão SSHFS somente quando algo acessar o sistema pela primeira vez /mnt/remote. Adicione x-systemd.automountàs opções:
Essa costuma ser a melhor opção para laptops, sistemas Wi-Fi ou servidores onde o host remoto pode ocasionalmente ficar indisponível. A semântica muda ligeiramente: a montagem automática é preparada durante a inicialização, mas a conexão SSH propriamente dita é estabelecida no primeiro acesso. Se um aplicativo realmente precisar que o diretório remoto esteja conectado antes de iniciar, mantenha a montagem de rede normal e faça com que a unidade systemd desse aplicativo dependa da unidade de montagem.
Você precisa do allow_other?
Por padrão, uma montagem FUSE só é acessível com as permissões associadas ao contexto de montagem. O manual do SSHFS documenta allow_othercomo permitir o acesso por outros usuários locais. Não adicione permissões adicionais a menos que um serviço ou outra conta realmente precise dos arquivos montados.
Se você usar o SSH allow_other, revise /etc/fuse.confprimeiro as implicações de segurança do FUSE. default_permissionsGeralmente, é apropriado combiná-lo com o FUSE para que as verificações de permissão do Unix local não sejam ignoradas. A conta SSH remota ainda determina, em última instância, quais operações o servidor permite.
Solução de problemas de falhas do SSHFS durante a inicialização
A montagem aguarda uma senha.
Repita o teste não interativo exatamente como está sudo ssh ... -o BatchMode=yes. Se falhar, corrija a autenticação por chave pública antes de mexer no systemd. Uma chave protegida por senha também precisará de um agente ou outro mecanismo de segredo de inicialização; uma montagem simples do fstab não pode digitar a senha para você.
Falha na verificação da chave do host
Não defina isso StrictHostKeyChecking=nocomo uma solução genérica. Verifique se o servidor foi reconstruído ou se a chave do host foi alterada legitimamente. A verificação da chave do host SSH é uma medida de segurança contra ataques de falsificação de identidade e ataques do tipo "homem no meio".
A montagem funciona após o login, mas não durante a inicialização.
Verifique o nome da unidade gerada e seu diário. Para /mnt/remote, o systemd normalmente escapa o caminho para mnt-remote.mount:
systemctl status mnt-remote.mount
journalctl -b -u mnt-remote.mount
Se você adicionou x-systemd.automount, verifique também:
systemctl status mnt-remote.automount
O acesso fica bloqueado após o servidor ou a rede desaparecer.
Mantenha os recursos Keep reconnecte SSH keepalive ativados. O manual do SSHFS alerta que as operações do sistema de arquivos podem ficar bloqueadas indefinidamente quando uma conexão interrompida não é detectada. Os keepalives limitam a detecção de falhas, mas qualquer operação de E/S que estivesse em andamento quando a conexão foi interrompida ainda pode falhar e precisar ser repetida pelo aplicativo.
Como verificar se a montagem realmente persiste após uma reinicialização?
Após a mount -aconclusão bem-sucedida, reinicie a máquina:
sudo reboot
Após reconectar, execute estas verificações:
findmnt -T /mnt/remote
systemctl is-active mnt-remote.mount
ls -la /mnt/remote
Se você selecionou essa opção x-systemd.automount, a unidade de montagem pode ficar inativa até o primeiro acesso. Verifique primeiro a montagem automática e, em seguida, acione-a com ls:
systemctl is-active mnt-remote.automount
ls -la /mnt/remote
findmnt -T /mnt/remote
Uma configuração bem-sucedida apresenta quatro propriedades observáveis: a autenticação SSH é concluída sem interação, a entrada no fstab é aprovada mount -a, o systemd reconhece a montagem como dependente da rede e os arquivos remotos ficam acessíveis após uma reinicialização completa. Se alguma dessas verificações falhar, solucione o problema diretamente nessa camada, em vez de adicionar mais opções de montagem aleatoriamente.