Il s'agit d'une extension de ma question précédente . J'ai besoin d'exécuter une commande stockée localement (c'est-à-dire mount /home
) sur une machine distante lors de la connexion ssh. En ce moment, j'utilise:
ssh -t mymachine.example.com 'mount /home ; /bin/bash'
ce qui fonctionne bien, mais je me demandais si je pouvais mettre cette commande dans mon .ssh/config
afin de ne pas avoir à la taper à chaque fois. J'ai trouvé une LocalCommand
option, mais je ne vois aucune RemoteCommand
option.
Il est important de le command-to-be-executed
stocker sur la machine locale, car il contiendra un mot de passe pour ouvrir un disque crypté. C'est la raison pour laquelle je ne peux pas mettre la commande .profile
sur la machine distante.
~/.ssh/rc
est à nouveau stocké sur la machine distante. En ce qui concerne votre commentaire sur l'ps
affichage de mes paramètres de ligne de commande (y compris le mot de passe), cela ne me dérange pas. C'est la machine distante à laquelle je ne fais pas confiance. Ma machine locale n'est utilisée que par moi-même, donc personne d'autre n'y a accèsps
.ps
sortie provient de la machine distante. Le fait est que tout ce que vous fournissez enssh
tant que commande à distance apparaîtra sur le serveur distant dansps
.Cela a été ajouté dans OpenSSH 7.6:
réf: https://www.openssh.com/txt/release-7.6
la source
la source
Vous pouvez le faire avec la coopération de la machine distante comme suit.
Sur votre machine locale, bourrez la commande à exécuter dans la variable d'environnement
LC_SSH_INITIAL_COMMAND
. SSH est généralement configuré pour transmettre toutes les variables d'environnement du formulaireLC_*
, car il s'agit normalement de paramètres régionaux.Sur la machine distante, exécutez
eval "$LC_SSH_INITIAL_COMMAND"
via les paramètres par clé dans~/.ssh/authorized_keys
ou à partir de~/.ssh/rc
(attention, si vous avez un~/.ssh/rc
fichier, vous devez prendre soin de l'exécuterxauth
manuellement pour le transfert X11).Avec la
authorized_keys
méthode, vous pouvez également exécuter une commande lorsque la session SSH se termine (à moins que le processus shell ne soit brusquement arrêté; vous devez au moins intercepter le signal HUP afin que votre commande soit exécutée même si la connexion s'éteint).Cependant, ce n'est pas un bon arrangement pour faire quelque chose de global comme monter un système de fichiers. Vous devrez prendre soin de ne pas remonter si le système de fichiers est déjà monté (par exemple en raison d'une commande SSH exécutée simultanément), et de ne pas démonter à la déconnexion. Ma recommandation pour ce cas d'utilisation est toujours de faire le montage explicitement, puis d'exécuter des commandes à distance sans rien faire de spécial et de démonter lorsque vous ne voulez plus accéder à ce système de fichiers.
la source
Je ne l'ai pas essayé mais une approche pourrait être
Subsystem
sur la télécommandesshd_config
qui exécute la commande que vous voulez en lisant quelques vars envSendEnv
sur le local.ssh/config
pour transmettre ces clés au serveur distantla source