7 votes

monter un répertoire local sur un serveur ssh distant

Je veux monter un répertoire local sur un serveur ssh distant. spécifiquement mon répertoire ~/.gnupg pour que je puisse utiliser mon trousseau local partout, sans le stocker à distance.

Je pense donc à cette solution :

  • garder un serveur ssh local ouvert (avec un pare-feu comme vous le souhaitez)
  • ssh vers distant redirigeant local:22 vers distant:10000
  • lancer sshfs pour monter localhost:10000 :.gnupg dans ~/.gnupg

J'ai mis ceci dans mon ssh/config :

Host remote
        HostName remotehost
        RemoteForward 10000 localhost:22
        User user
        PermitLocalCommand yes
        LocalCommand sshfs -p 10000 user@127.0.0.1:/Users/remoteuser/.gnupg .gnupg

en faisant ssh, j'obtiens :

fuse: bad mount point `.gnupg': No such file or directory

Si je lance le sshfs manuellement après la connexion ssh, tout fonctionne bien. Je suppose donc que la directive LocalCommand est exécutée avant RemoteForward.
comment résoudre ce problème ?

5voto

crimson-egret Points 2977

Problème : ssh 's LocalCommand est exécuté sur le local (client), et non à distance comme vous le souhaitez. Il n'y a pas de RemoteCommand mais vous pouvez intégrer cette fonctionnalité dans votre fichier de configuration. Notez que toutes ces options supposent que votre remotehost:.gnupg existe au préalable.

Option 1 : Utilisez deux spécifications d'hôte distinctes dans votre ~/.ssh/config :

Host remote
    HostName remotehost
    PermitLocalCommand yes
    LocalCommand ssh -f %r@%n-mount -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg

Host remote-mount
    HostName remotehost
    ForwardAgent yes
    RemoteForward 10000 localhost:22

Inconvénients : les deux entrées doivent sortir pour chaque l'hôte que vous voulez pour ce point de montage.

Option 2 : Combiner les options ssh et la redirection de port dans LocalCommand :

Host remote
    HostName remotehost
    PermitLocalCommand yes
    LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg

Notez la différence subtile entre les deux LocalCommand lignes est l'utilisation de %n dans le premier exemple et de %h dans le second. Cela fonctionnera, mais a un énorme ASSUMPTION : vous JAMAIS ssh à un hôte par son vrai nom et seulement via des "noms courts" qui existent dans votre système d'exploitation. .ssh/config sinon vous allez vous retrouver avec une boucle infinie de ssh connexions essayant d'exécuter votre LocalCommand .

Option 3 : Utilisez le multiplexage SSH pour n'établir qu'une seule connexion avec le serveur distant :

Host remote
    HostName remotehost
    PermitLocalCommand yes
    LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
    ControlMaster auto
    ControlPersist 30m
    ControlPath ~/.ssh/controlmasters/%r@%h:%p

Je pense que c'est la seule solution gagnante, et qu'elle peut même fonctionner dans Host * règles, ET ne souffre d'aucun inconvénient. Il résout même le problème des secondes sessions ssh sur le même hôte qui ne tenteront PAS de remonter le même répertoire via sshfs.

Attention : Un dernier problème que je n'ai pas pris la peine de résoudre : votre télécommande sshfs persistera longtemps après que vous vous soyez déconnecté de l'hôte distant. En fait, il ne sera jamais unmount sauf si votre hôte local se déconnecte ou si la connexion est interrompue.

Vous pourriez envisager une autre option pour umount que sshfs monter lorsque vous vous déconnectez de l'hôte distant, en utilisant peut-être des idées telles que celle-ci . Ou vous pouvez jouer à des jeux avec le LocalCommand pour exécuter quelque chose qui regarde et s'auto-monte après avoir vu un événement déclencheur se produire, mais cela semble fragile au mieux.

Une autre option serait d'envelopper ssh commandes dans un Shell ou peut-être utiliser ProxyCommand pour faire quelque chose de délicat, mais je laisse cet exercice au lecteur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X