Commande unique pour vous connecter à SSH et exécuter le programme?

58

Existe-t-il un moyen de structurer une commande unique pour se connecter via SSH à un serveur distant et exécuter un programme sur le shell de connexion distant?

Dans le manuel OpenSSH, il est écrit "Si la commande est spécifiée, elle est exécutée sur l'hôte distant au lieu d'un shell de connexion". Ainsi, par exemple, ssh user@server mailouvrira une session sur le serveur distant, affichera l’état de la boîte aux lettres, puis vous renverra au shell local. Est-il possible de rester sur le shell distant après avoir affiché l'état du courrier?

De plus, ssh user@server [command]cela ne semble pas fonctionner si la commande est un programme, par exemple vim ou mutt. Existe-t-il un moyen de se connecter au shell distant et d'exécuter un programme tout en restant dans le shell distant pendant le programme et après avoir quitté le programme, pour ne sortir que d'une logoutcommande spécifique (comme dans une session SSH normale)?

Je voudrais éventuellement pouvoir mettre une telle commande comme alias dans le fichier local .bashrc, afin qu’elle puisse être exécutée rapidement si vous le souhaitez. Un exemple serait de vous connecter via SSH à un serveur distant et d’ouvrir mutt sur le serveur distant pour lire ou envoyer un courrier électronique.

utilisateur981178
la source
Qu'entendez-vous par rester sur le shell distant après avoir affiché l'état du courrier? Ce ne serait pas équivalent à faire un ssh après l' exécution de la commande mail: ssh remote@server mail ; ssh remote@server? De même, toute commande exécutée à distance nécessitant un terminal ne survivra pas / ne fonctionnera pas avec ssh, n'est-ce pas?
mkc
Cela semble fonctionner d’exécuter la commande puis d’obtenir le shell distant, mais cela se fait en ouvrant une connexion SSH, en exécutant la commande, en fermant la connexion SSH, puis en ouvrant une autre connexion SSH. Existe-t-il un moyen de faire tout cela avec une première connexion? En outre, cela n'active toujours pas la commande pour exécuter un programme.
user981178

Réponses:

90

Avez-vous essayé ssh -t user@server "mail && bash"(ou remplacez-le bashpar la coque de votre choix)?

Le -test nécessaire pour créer un pseudo-tty que bash utilisera comme shell interactif.

jsbillings
la source
1
Bien que, je l’avoue, je préférerais probablement courir à l’ muttintérieur d’un tmuxou screen, puis je pourrai attacher et rattacher à volonté, en plus de pouvoir exécuter autant de coquillages supplémentaires que je le souhaiterais.
Jsbillings
1
Eh bien, je trouve différents comportements avec cette commande. Utilisé comme ci-dessus (dans la réponse), il n'affiche toujours que l'état de la boîte aux lettres, puis se déconnecte, mais il indique également que la connexion est fermée. Utilisé comme ci - dessus, mais avec nano, par exemple, au lieu du courrier, il ouvre une session de nano, puis lors de la sortie ne retourne au shell bash à distance, qui doit alors être sorti avec au exitlieu de logout. Je suis incapable de le tester encore avec Mutt (ou similaire).
user981178
L' -toption génère- t-elle des problèmes de sécurité? Je n'ai pas utilisé cela auparavant.
user981178
Autant que je sache, cela n'introduit aucun problème de sécurité. Avez-vous essayé de remplacer le &&avec un ;?
brm
toute commande dont l'état de sortie est différent de zéro entraînerait le non-fonctionnement de la deuxième commande en raison de la logique du shell.
jsbillings