ssh_config: spécifiez la commande à exécuter sur la machine distante lors de la connexion

16

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/configafin de ne pas avoir à la taper à chaque fois. J'ai trouvé une LocalCommandoption, mais je ne vois aucune RemoteCommandoption.

Il est important de le command-to-be-executedstocker 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 .profilesur la machine distante.

Martin Vegter
la source

Réponses:

6

Cette question a déjà été posée sur SuperUser. La première réponse utilise un fichier distant qui ne correspond pas à vos besoins, mais la deuxième réponse qui suggère d'utiliser un alias local pourrait être la solution à votre problème.

Il est important que la commande à exécuter soit stockée sur la machine locale, car elle contiendra un mot de passe pour ouvrir un disque crypté. C'est la raison pour laquelle je ne peux pas mettre la commande en .profile sur la machine distante.

Ce n'est probablement pas sûr. Si j'utilise une echocommande en tant que commande ssh, elle apparaît pssur le serveur distant:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo
Martin von Wittich
la source
merci, mais dans la solution sur SuperUser ~/.ssh/rcest à nouveau stocké sur la machine distante. En ce qui concerne votre commentaire sur l' psaffichage 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ès ps.
Martin Vegter
6
Cette pssortie provient de la machine distante. Le fait est que tout ce que vous fournissez en sshtant que commande à distance apparaîtra sur le serveur distant dans ps.
Martin von Wittich
1
Oui, tu as raison. Merci de l'avoir signalé.
Martin Vegter
1
@MartinvonWittich - Chaque site SE est indépendant, il est donc tout à fait acceptable pour chaque site d'avoir des Q et A similaires tant qu'ils sont sur le sujet de ce site particulier. Il est recommandé de copier du contenu si un Q apparaît et que le A se trouve sur un autre site SE. Personnalisez-le comme il convient afin qu'il soit sur le sujet.
slm
7

Cela a été ajouté dans OpenSSH 7.6:

ajoutez l'option RemoteCommand pour spécifier une commande dans le fichier de configuration ssh au lieu de la donner sur la ligne de commande du client. Cela permet au fichier de configuration de spécifier la commande qui sera exécutée sur l'hôte distant.

réf: https://www.openssh.com/txt/release-7.6

Camden Narzt
la source
6
RequestTTY yes
RemoteCommand screen -UDr
JRG
la source
génial!! Merci!!
Shrish
2

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 formulaire LC_*, 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/rcfichier, vous devez prendre soin de l'exécuter xauthmanuellement pour le transfert X11).

Avec la authorized_keysmé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.

Gilles 'SO- arrête d'être méchant'
la source
0

Je ne l'ai pas essayé mais une approche pourrait être

  • Déclarez un Subsystemsur la télécommande sshd_configqui exécute la commande que vous voulez en lisant quelques vars env
  • Utiliser SendEnvsur le local .ssh/configpour transmettre ces clés au serveur distant
démolir
la source