Como montar o SSHFS remoto via máquina intermediária? Tunelamento?

26

Gostaria de montar um sistema de arquivos remoto (A) usando SSHFS, mas às vezes tenho endereço IP, cujo acesso não é permitido. Então, meu plano é acessá-lo através de outra máquina (B) nessa rede. Preciso montar A em B e depois montar B (e A) no meu computador local? Tem algum jeito melhor de fazer isso?

Atualizar

Apenas para esclarecer o procedimento:

Primeiro, eu faço um túnel

ssh -f user@machineB -L MYPORT:machineA:22 -N

E então eu monto o sistema de arquivos remoto

sshfs -p MYPORT [email protected]:/myremotepath /mylocalpath

Está correto?

Como destruo o túnel quando termino?

Andrei
fonte
1
melhor maneira de configurar túnel é ter conexão com B da tela GNU janela usando usuário ssh @ MachineB -L 2222: machineA: 22 -N assim você pode facilmente matá-lo com ^ C
edk

Respostas:

9

sim tunelamento. Você conecta a máquina B, cria o túnel local (-L) à porta SSHd da máquina A e depois sshfs ao localhost à porta do túnel recém-criado.

edk
fonte
O comando a seguir é o caminho certo para fazer isso? ssh -f user@machineB -L 25:machineA:25 -N
Andrei
1
sim se você tem escuta sshd à porta 25 na máquina A. então você vai ter que sshfs -p 25 [email protected]: / path / localpath
edk
1
Aha, então para a configuração padrão do ssh eu preciso ssh -f user@machineB -L 22:machineA:22 -N, certo?
Andrei
16

Você pode usar a opção ssh_commandde sshfspara fazer o truque:

sshfs ma: /mnt -o ssh_command='ssh -t mb ssh'

Desmonte com o habitual

fusermount -u /mnt

Desculpe, isso é 7 anos atrasado ...

Rodrigo Farias
fonte
5
Com a nova opção -J no OpenSSH 1.1 é algo ao longo: ma sshfs: / mnt -o ssh_command = 'ssh -J mb'
Ohad Rubin
0

Seu esquema de conexão: Your machine --> Host B --> Host A

Nossa solução usará o Proxy Jump, introduzido no OpenSSH 7.3 , portanto, você precisará verificar se sua versão é mais recente com:

ssh -V

Então você precisa configurar corretamente o seu ~ / .ssh / config. Por exemplo, se machineB estiver disponível com um login de senha da machineA :

machineB
    HostName {machineB ip address}
    User {machineB username}
    Port {machineB port-number}
    IdentityFile ~/.ssh/{machineB private ssh key}

machineA
    ProxyJump machineB
    Hostname {machineA ip address, maybe in local network}
    User {machineA username}
    Port {machineA port-number}

Por fim, crie seu ponto de montagem e adicione linha ao / etc / fstab

machineB:{machineB mount path}  {your local mountpoint}  fuse.sshfs delay_connect,_netdev,user,idmap=user,follow_symlinks,identityfile={local path to machineB private key},default_permissions,uid={local user uid},gid={local user gid} 0 0
lucidyan
fonte
Isso tem algum benefício em relação ao uso apenas -o ssh_command="ssh -J machineB"?
clemisch