203 votes

Lancez ssh et exécutez immédiatement la commande

J'essaie de trouver une commande UNIX ou bash pour exécuter une commande après s'être connecté à un serveur ssh. Par exemple :

ssh name@ip "tmux list-sessions"

Le code ci-dessus fonctionne, il liste les sessions, mais il se déconnecte ensuite immédiatement. Le mettre dans le sshrc du côté serveur fonctionne, mais je dois pouvoir le taper du côté client. Je veux être capable d'exécuter une commande, il se connecte, ouvre la fenêtre, puis exécute la commande que j'ai définie. J'ai essayé

[command] | ssh name@ip

ssh name@ip [command]

ssh name@ip "[command]"

ssh -t name@ip [command]

312voto

Barmar Points 135986
ssh -t 'command; bash -l'

exécutera la commande et lancera un shell de connexion lorsqu'elle sera terminée. Par exemple :

ssh -t user@domain.example 'cd /some/path; bash -l'

8voto

Vous pouvez utiliser le LocalCommand si l'option de ligne de commande PermitLocalCommand est activée :

ssh username@hostname -o LocalCommand="tmux list-sessions"

Pour plus de détails sur les options disponibles, voir la section ssh_config page de manuel.

7voto

Keith Thompson Points 85120

Ce n'est pas tout à fait ce que vous recherchez, mais je l'ai trouvé utile dans des circonstances similaires.

J'ai récemment ajouté les éléments suivants à mon $HOME/.bashrc (quelque chose de similaire devrait être possible avec des shells autres que bash) :

if [ -f $HOME/.add-screen-to-history ] ; then
    history -s 'screen -dr'
fi

Je garde un screen en cours d'exécution sur une machine particulière, et j'ai eu des problèmes de ssh les connexions à cette machine ont été abandonnées, ce qui m'a obligé à réexécuter screen -dr à chaque fois que je me reconnecte.

Avec cet ajout, et après avoir créé ce fichier (vide) dans mon répertoire d'origine, j'ai automatiquement l'adresse suivante screen -dr dans mon historique lorsque mon shell démarre. Après la reconnexion, je peux simplement taper Control-P Enter et je suis de retour dans ma session d'écran -- ou je peux l'ignorer. C'est flexible, mais pas tout à fait automatique, et dans votre cas c'est plus facile que de taper tmux list-sessions .

Vous pouvez faire en sorte que le history -s commande inconditionnelle.

Cela nécessite de mettre à jour votre $HOME/.bashrc sur chacun des systèmes cibles, ce qui peut ou non le rendre inadapté à vos besoins.

0voto

Jake Lin Points 850

Vous pouvez utiliser la commande suivante à partir de comment utiliser ssh pour exécuter le shell script sur une machine distante ?

ssh user@host <<'ENDSSH'
#commands to run on remote host
ENDSSH

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X