J'aimerais faire quelque chose comme ssh example.com 'ls'
Cependant par page de manuel ssh:
Si commande est spécifiée, elle est exécutée sur l'hôte distant au lieu d'un shell de connexion.
Donc, ce qui se passe, c’est qu’il ls
affiche sa sortie puis ssh se ferme.
Ce que je n'arrive pas à comprendre, c'est comment ouvrir le shell de connexion complet puis exécuter la commande à l'intérieur de ce shell. Laisser le shell ouvert après l'exécution de la commande. Comme si j'avais fait manuellement les choses suivantes:
localhost$ ssh example.com
example.com$ ls
/folder1
/folder2
example.com$ _
Des idées?
ssh example.com 'ls;bash'
vousRéponses:
Il suffit de dire à bash de s’exécuter
ls
puis de se lancer dans un shell de connexionla source
screen
. Sinon, cela ressemble à ce que j'essayais de faire.-t
Forcer l'allocation pseudo-terminale. Ceci peut être utilisé pour exécuter des programmes d'écran arbitraires sur une machine distante. Est légèrement plus approprié quebash -i
.exec
Aucun nouveau processus n'est créé.-l
recherche ~ / .bash_profile, ~ / .bash_login et ~ / .profile, dans cet ordre, puis lit et exécute les commandes depuis ... Sans cela, vous ne pouvez probablement pas exécuter de scripts / commandes depuis le répertoire ~ / bin, car ce code from ~ / .profile ne sera pas exécuté sans-l
drapeau:la source
bash
vous corriger pour permettre cela.exec bash
ouexec $SHELL
Dans votre commentaire sur la réponse de fons, vous dites que cela ne fonctionne pas pendant l'utilisation
screen
.Pouvez-vous développer sur ce sujet? En regardant le code source de openssh, sshd exécute la commande en appelant
Ainsi, par exemple, si votre shell par défaut est
screen
, cela ne fonctionnera pas si bien parce quescreen
de »-c
drapeau juste l' emporte sur son.scrreenrc
. Donc, il n'y a vraiment aucun moyen d'envoyer des commandes à l'écran s'il s'agit de votre shell par défaut. Vous devrez en fait lancer screen en tant que commande donnée à ssh, mais avec un shell par défaut qui n'est pas screen .Si c'est ce que vous essayez de faire, je pense que les choses vont devenir vraiment bizarres, car
screen
elles fermeront également les fenêtres avec des programmes non interactifs. Vous devrez donc faire un tour similaire à celui de fons, mais à un niveau plus profond. SO, avec par exemple / bin / bash (et non screen) comme shell par défaut. Quelque chose comme:Ce qui devrait - prendre une profonde respiration-- ssh dans l'hôte, lancez bash -c avec une commande de screen, ce qui créera une nouvelle fenêtre. Si cette fenêtre venait juste d'ouvrir ls, elle se terminerait et l'écran se terminerait. Nous utilisons donc le truc de fons à l'intérieur de la nouvelle fenêtre d'écran .
Je pense que ça va marcher, si c'est même ce que tu essayais de faire;)
la source
screen
dans cette situation est que je le charge normalement avecexec screen -RR
mon fichier.profile
. Cela signifie quebash -l
tente de charger l'écran qui rejette le reste. il semble que je puisse contourner le problème en supprimant '-l' dans vos solutions, ainsi que dans vos solutions (votre solution me laisse ensuitescreen
). C'est un peu moche cependant.Plusieurs options -t forcent l'allocation de tty, même si ssh n'a pas de tty local:
la source