web-dev-qa-db-fra.com

Exécutez ssh et exécutez immédiatement la commande

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

ssh name@ip "tmux list-sessions"

Le code ci-dessus fonctionne, il répertorie les sessions, mais il se déconnecte immédiatement. Le placer dans le sshrc côté serveur fonctionne, mais je dois être capable de le taper du côté client. Je veux pouvoir 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]
135
cadlac
ssh -t 'command; bash -l'

exécutera la commande puis lancera un shell de connexion à la fin. Par exemple:

ssh -t [email protected] 'cd /some/path; bash -l'
214
Barmar

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

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

Pour plus de détails sur les options disponibles, reportez-vous à la page de manuel ssh_config.

14
Miguel de Val-Borro

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

J'ai récemment ajouté ce qui suit à 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 une session screen en cours d'exécution sur une machine particulière et j'ai eu des problèmes avec les connexions ssh à cette machine étant interrompues, ce qui m'a obligé à réexécuter screen -dr à chaque fois que je me reconnectais.

Avec cet ajout, et après avoir créé ce fichier (vide) dans mon répertoire personnel, j'ai automatiquement la commande screen -dr dans mon historique au démarrage de mon shell. Après avoir reconnecté, je peux simplement taper Control-PEnter 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 voudrez peut-être rendre la commande history -s inconditionnelle.

Cela nécessite la mise à jour de votre $HOME/.bashrc sur chacun des systèmes cibles, ce qui pourrait ou non le rendre inutilisable.

6
Keith Thompson