sshfs sempre pedindo senha no fstab?

20

Estou tentando inserir uma montagem sshfs no / etc / fstab com a seguinte linha:

sshfs#[email protected]:/media/usb0 /media/ExtHD fuse     defaults,nonempty,allow_other 0 0

Para que esse volume seja montado na inicialização. Após a inicialização, nada acontece, mas quando eu uso o comando sudo mount -a, sempre sou solicitada a senha. Configurei as Chaves SSH e as transferi para o computador em 192.168.0.2, e posso efetuar login no ssh normal sem senha. Como posso impedir que o fusível solicite minha senha para que o volume possa ser montado automaticamente no momento da inicialização?

Se isso ajudar, estou tentando me conectar a um servidor doméstico executando o Debian a partir de um laptop executando o Arch Linux. obrigado

semiserioso
fonte

Respostas:

13

A autenticação baseada em chave só pode funcionar se o sshprocesso puder encontrar sua chave. Você presumivelmente tem sua chave no diretório inicial; mas você nunca disse sshfsonde procurar uma chave. No momento da inicialização, ele rootmontaria todos os sistemas de arquivos; portanto, a chave deve estar dentro /root/.sshou referenciada /root/.ssh/config.

Eu recomendo montar o sistema de arquivos após o login e como seu próprio usuário. Coloque isso em um script que é executado quando você faz login:

ssh-add ~/.ssh/name_of_key.id_rsa
sshfs homeserver:/media/usb0 ~/exthd

Coloque um alias chamado homeserverno seu ~/.ssh/config:

Host homeserver
HostName 192.168.0.2
User oli
Gilles 'SO- parar de ser mau'
fonte
Ahh, essa é uma maneira melhor de fazê-lo, não pensei em colocá-lo no meu script de login. Obrigado!
semiserious
Cuidado ao usar ~no ponto de montagem. Se você estiver usando um ícone do iniciador no painel para executar o comando em vez de um terminal, ele ~poderá não ser avaliado /home/e o comando falhará.
Nick
@ Nick Se você estiver usando uma GUI, ela pode ter uma ferramenta dedicada à montagem automática. Se você seguir minha resposta, deverá colocar os dois comandos em um script de shell; o ícone do iniciador executaria esse script.
Gilles 'SO- stop be evil'
10

Consegui fazer o sshfs montar via fstab com o Ubuntu 14.04 usando a seguinte sintaxe como usuário padrão (observe que qualquer coisa no CAPS é uma variável para você preencher):

USER@HOST:/REMOTE_DIR /LOCAL_DIR fuse.sshfs delay_connect,_netdev,user,idmap=user,transform_symlinks,identityfile=/home/USERNAME/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID,gid=USER_GID 0 0

Esta é uma combinação das informações encontradas aqui /superuser/669287/automount-sshfs-using-fstab-without-mount-a e adicionando o delay_connect a partir daqui /ubuntu/ 326977 / sshfs-não está montando automaticamente na inicialização, apesar da configuração etc-fstab .

Usei este tutorial para obter meus USER_ID e USER_GID: https://kb.iu.edu/data/adwf.html

Para encontrar o UID ou GID de um usuário no Unix, use o comando id. Para encontrar o UID de um usuário específico, no prompt do Unix, digite:

id -u username

Substitua o nome de usuário pelo nome de usuário do usuário apropriado. Para encontrar o GID de um usuário, no prompt do Unix, digite:

id -g username

Além disso, se você quiser um tutorial completo, ele será publicado em https://www.variux.com/sshfs-automount-at-boot-with-fstab-on-ubuntu-14-04/

variuxDavid
fonte
Esse link: variux.com/blog/?p=161 parece não estar mais funcionando ...
Christian
@ChristianMuggli obrigado pelo seu comentário. Atualizei o endereço completo do tutorial. Eu não testei o tutorial há muito tempo, no entanto. variux.com/sshfs-automount-at-boot-with-fstab-on-ubuntu-14-04
variuxDavid
5

Eu tive o mesmo problema.

Eu tinha anteriormente configurado teclas ssh através do ssh-keygene, em seguida,ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

O ssh funcionou bem sem me pedir uma senha, então fiquei confuso sobre o porquê do sshfs ainda querer a senha ...

Isto é,

ssh [email protected] 

funcionou bem, porém o sshfs ainda pediu uma senha quando eu digitei

sudo sshfs [email protected]:/home/raspberry/Videos /home/pi/LinuxMintMountedFolder/ -o allow_other

Como Gilles acima explicou, sshfsestava procurando no diretório raiz as chaves necessárias.

Portanto, resolvi isso apenas copiando os arquivos id_rsa e id_rsa.pub da pasta .ssh oculta da minha pasta inicial para a pasta .ssh da raiz, ou seja

cp /home/pi/.ssh/id_rsa /root/.ssh/
cp /home/pi/.ssh/id_rsa.pub /root/.ssh/

Em seguida, digitar o seguinte funcionou sem me incomodar com uma senha:

sudo sshfs [email protected]:/home/raspberry/Videos /home/pi/LinuxMintMountedFolder/ -o allow_other
CMP
fonte
Isso é realmente muito ruim do ponto de vista da segurança. É melhor criar um conjunto separado de chaves para raiz e adicionar isso também a allowed_keys. Você nunca deve copiar chaves privadas.
Christian Wolf
3

Se você deseja inicializar sem uma senha, precisará criar chaves ssh públicas / privadas sem senha. Não é recomendável, mas você pode pelo menos proteger esses arquivos com um chmod 400usuário como root.

Depois disso, como de costume, você precisará copiar a chave pública no ponto de montagem:

ssh-copy-id -i my_new_key.pub [email protected]

E você precisará dizer ao sshfs para usar essa chave.

[email protected]:/media/usb0 /media/ExtHD fuse     defaults,nonempty,allow_other,'IdentityFile /path/to/private/key' 0 0
Coren
fonte
2
SSHFS version 2.8 fuse: unknown option 'SSHOPT=IdentityFile /home/ravi/.ssh/id_boxy_rsa'
Tom Hale
1
@TomHale em vez de ,SSHOPT='IdentityFile /path/to/private/key'é simplesmente,IdentityFile /path/to/private/key
pulkitsinghal
2

Funciona perfeitamente para mim no Debian 8.2, adicionando a seguinte linha a fstab:

user@hostname:/path/to/localmountpoint /path/to/remotemountpoint fuse.sshfs _netdev,user,port=(if_not_22),idmap=user,transform_symlinks,identityfile=/home/user/.ssh/id_rsa,allow_other,default_permissions,uid=user_id,gid=group_id 0 0

Nome do host indica que o usuário do servidor remoto (pasta da qual montar) é o mesmo local e remotamente. (Mais fácil)

Verifique se você criou localmente a chave ssh para o usuário que está usando ssh-keygene use ssh-copy-idpara copiar a chave no servidor remoto (nome do host).

Você pode encontrar user_ide group_idpara o usuário no servidor local /etc/passwd.

Verifique também se o usuário possui permissões de leitura / gravação na pasta path/to/localmountpoint.

LincolnP
fonte
2

Na verdade, você pode montar o SSHFS sem chave pública na inicialização usando a opção password_stdin, mas não com o fstab.

O que você precisa é de um pequeno arquivo de script e cron.

Esteja ciente de que a chave pública sempre é uma escolha melhor. Às vezes, porém, as chaves públicas não funcionam (eu já tive esse problema algumas vezes). Observe que o arquivo de script conterá a senha sem problemas. Portanto, você deve se certificar de que apenas o root tenha permissão para esse arquivo!

O arquivo de script pode ficar assim (/root/automount.sh):

#!/bin/sh
if [ $(mount | grep 'user@server:/folder' | wc -l) -ne 1 ]
then
    echo 'PASSWORD' | sshfs user@server:/folder /mnt/mountpoint -o password_stdin,allow_other
    echo 'SSHFS has been mounted.'
else
    echo 'SSHFS is already mounted.'
fi

Para executar isso na inicialização, você pode usar o crontab como root e digite esta linha:

@reboot /root/automount.sh

Como mencionado acima, você deve garantir que absolutamente ninguém possa ler o arquivo, pois ele contém uma senha em texto sem formatação!

-rwx------ 1 root root 526 Nov 21 12:57 automount.sh

Até agora, após cada reinicialização, seu sistema montará automaticamente o SSHFS usando credenciais.

Nico
fonte
0

Teve o mesmo problema. No final, ajudou a definir o tipo como fusível simples ou (o que é mais provável) truncar opções para:

fuse reconnect,idmap=user,allow_other,default_permissions

que funcionou para mim no final

Kangur
fonte
0

Se você está tentando se conectar a um servidor que não suporta chaves e ainda deseja que seja automático, você pode sshpassdigitar sua senha para você, mesmo com sshfse mesmo em fstab.

Por exemplo, se você colocar algo semelhante a isso em /etc/fstab:

sshfs#username@host:/  /mnt/here   fuse   auto,ssh_command=sshpass\040-f\040/root/.ssh/host.password\040ssh  0  0

Em seguida, coloque a senha no nome do arquivo especificado em /etc/fstab:

echo 'secret' > /root/.ssh/host.password

Verifique se você instalou sshpass:

pacman -S sshpass  # if you're using Arch Linux

Então deve funcionar:

mount /mnt/here

Pode ser necessário que ssho servidor seja o primeiro a confirmar sua chave, mas depois isso deve funcionar sem interação manual e com o autosinalizador fstabnele deve ser montado no momento da inicialização, sem a necessidade de inserir manualmente a senha.

Malvineous
fonte