Comment monter SSHFS distant via une machine intermédiaire? Tunneling?


26

Je voudrais monter un système de fichiers distant (A) en utilisant SSHFS, mais j'ai parfois une adresse IP dont l'accès n'est pas autorisé. Mon plan est donc d'y accéder via une autre machine (B) dans ce réseau. Dois-je monter A sur B, puis monter B (et A) sur mon ordinateur local? Y a-t-il une meilleure façon de le faire?

Mise à jour

Juste pour clarifier la procédure:

D'abord, je fais un tunnel

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

Et puis je monte le système de fichiers distant

sshfs -p MYPORT user@127.0.0.1:/myremotepath /mylocalpath

Est-ce correct?

Comment puis-je détruire le tunnel quand j'ai fini?


1
la meilleure façon de configurer le tunnel est d'avoir une connexion à B depuis la fenêtre de l' écran GNU en utilisant ssh user @ machineB -L 2222: machineA: 22 -N afin que vous puissiez facilement le tuer avec ^ C
edk

Réponses:


9

ouais tunnel. Vous connectez la machine B, créez un tunnel local (-L) au port SSHd de la machine A, puis sshfs à localhost au port du tunnel nouvellement créé.


La commande suivante est-elle la bonne façon de le faire? ssh -f user@machineB -L 25:machineA:25 -N
Andrei

1
oui si sshd écoute le port 25 sur la machine A. alors il vous suffit de sshfs -p 25 user@127.0.0.1: / path / localpath
edk

1
Aha, donc pour la configuration ssh par défaut dont j'ai besoin ssh -f user@machineB -L 22:machineA:22 -N, non?
Andrei

16

Vous pouvez utiliser l'option ssh_commandde sshfsfaire l'affaire:

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

Démontez avec l'habituel

fusermount -u /mnt

Désolé c'est 7 ans de retard ...


5
Avec la nouvelle option -J dans Openssh 1.1, c'est quelque chose: sshfs ma: / mnt -o ssh_command = 'ssh -J mb'
Ohad Rubin

0

Votre schéma de connexion: Your machine --> Host B --> Host A

Notre solution utilisera Proxy Jump, introduite dans OpenSSH 7.3 , vous devrez donc vérifier que votre version est plus récente avec:

ssh -V

Ensuite, vous devez configurer correctement votre ~ / .ssh / config. Par exemple, si machineB est disponible avec une connexion par mot de passe de 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}

Enfin, créez votre point de montage et ajoutez une ligne à / 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

Cela a-t-il un avantage par rapport à l'utilisation uniquement -o ssh_command="ssh -J machineB"?
clemisch
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.