Exécution d'une commande sur l'hôte distant avec SSH interactif (conditionnellement)

9

Je voudrais pouvoir exécuter automatiquement une commande sur un hôte distant chaque fois que je me connecte à cet hôte, mais dans la session SSH interactive actuelle.

Quelque chose comme

ssh user@remotehost [run do.sh]

d'où do.shvient quelques tâches d'entretien ménager, puis se rattache à une screensession (actuellement, je lance do.shmanuellement après la connexion à l'hôte).

Je ne veux pas l'ajouter à .bashrccar je me connecte à cet hôte à partir d'autres machines et je ne veux do.shpas exécuter lorsque je me connecte à partir de là, j'ai donc besoin que ce soit facultatif.

Jim Farkas
la source
1
pourquoi tu ne cours pas simplement ssh user@remotehost /path/to/do.sh? Si cela fonctionne, vous pouvez même l'aliaser dans .ssh / config ou votre .bashrc personnel
Coren
Vous voulez donc exécuter "do.sh" lorsque vous vous connectez à remotehost à partir de quelque part, mais pas lorsque vous vous connectez à remotehost à partir de quelque chose d'autre? Quels sont les hôtes vous connecter à partir devrait déclencher « do.sh », et que d' autres devraient pas?
Mat
Oui, je veux l'exécuter parfois, mais pas tout le temps, la raison en est que j'ai un raccourci clavier depuis un lanceur sur mon Mac qui me donne ce que je veux la plupart du temps. J'ai frappé un raccourci et je veux faire ssh dans la boîte puis me rattacher à une session écran, mais je ne veux pas le faire si j'utilise un terminal normal comme "ssh user @ host". La solution mentionnée ci-dessous par Patkos fait exactement ce dont j'ai besoin.
Jim Farkas

Réponses:

15

Vous pouvez essayer quelque chose comme ceci:

ssh server -t "do.sh; bash --login"

comme suggéré ici: /server/167416/change-directory-automatically-on-ssh-login

Ou vous pouvez essayer d'utiliser l'option 'LocalCommand' dans sshd_conf (ou ~ / .ssh / config) comme décrit dans la page de manuel officielle: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

Patkos Csaba
la source
1
Merci beaucoup!! Le serveur ssh -t "/home/user/do.sh; bash --login" a fonctionné pour moi. köszönöm szépen!
Jim Farkas
1
Szivesen (vous êtes les bienvenus)
Patkos Csaba
@PatkosCsaba Veuillez éviter d'autres langues que l'anglais ici. Cela vaut également pour les commentaires.
LinuxSecurityFreak
3

Une partie du puzzle: en supposant OpenSSH, le sshclient définira la variable d'environnement suivante:

SSH_CONNECTION Identifie les extrémités client et serveur de la connexion. La variable contient quatre valeurs séparées par des espaces: l'adresse IP du client , le numéro de port client, l'adresse IP du serveur et le numéro de port du serveur.

Vous pouvez donc utiliser ces informations pour savoir d' où vient votre connexion .

sr_
la source