Jak zamontować zdalny SSHFS przez maszynę pośrednią? Tunelowanie?

26

Chciałbym zamontować zdalny system plików (A) za pomocą SSHFS, ale czasami mam adres IP, z którego dostęp jest niedozwolony. Więc moim planem jest dostęp do niego za pośrednictwem innej maszyny (B) w tej sieci. Czy muszę zamontować A na B, a następnie zamontować B (i A) na moim komputerze lokalnym? Czy jest na to lepszy sposób?

Aktualizacja

Aby wyjaśnić procedurę:

Najpierw robię tunel

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

A potem montuję zdalny system plików

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

Czy to jest poprawne?

Jak zniszczyć tunel, kiedy skończę?

Andrei
źródło
1
lepszym sposobem na skonfigurowanie tunelu jest połączenie z B z okna ekranu GNU za pomocą ssh user @ machineB -L 2222: machineA: 22 -N, dzięki czemu można go łatwo zabić za pomocą ^ C
edk

Odpowiedzi:

9

tak, tunelowanie. Podłączasz komputer B, tworzysz tunel lokalny (-L) do portu SSHd komputera A, a następnie sshfs do localhost do portu nowo utworzonego tunelu.

edk
źródło
Czy poniższe polecenie to właściwy sposób? ssh -f user@machineB -L 25:machineA:25 -N
Andrei
1
tak, jeśli sshd nasłuchuje portu 25 na komputerze A. to wystarczy sshfs -p 25 uż[email protected]: / path / localpath
edk
1
Aha, więc potrzebuję domyślnej konfiguracji ssh ssh -f user@machineB -L 22:machineA:22 -N, prawda?
Andrei
16

Można użyć opcji ssh_commando sshfsrade:

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

Odłącz od zwykłego

fusermount -u /mnt

Przepraszam, to 7 lat spóźnienia ...

Rodrigo Farias
źródło
5
Dzięki nowej opcji -J w openssh 1.1 jest to coś: sshfs ma: / mnt -o ssh_command = 'ssh -J mb'
Ohad Rubin
0

Twój schemat połączeń: Your machine --> Host B --> Host A

Nasze rozwiązanie będzie korzystało z Proxy Jump, wprowadzonego w OpenSSH 7.3 , więc musisz sprawdzić, czy twoja wersja jest nowsza dzięki:

ssh -V

Następnie musisz poprawnie skonfigurować ~ / .ssh / config. Na przykład, jeśli komputer B jest dostępny z hasłem logowania z komputera A :

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}

Na koniec utwórz punkt montowania i dodaj linię do / 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
źródło
Czy ma to jakąś korzyść w porównaniu z używaniem tylko -o ssh_command="ssh -J machineB"?
clemisch