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.