2009-10-27 17 views
14

Je voudrais une commande qui ssh'es dans une machine, exécute une commande (cd ou exécute un script ou su), puis me donne le shell. Passer une commande à ssh semble toujours sortir.ssh avec la commande .... Plus le shell

Quelques exemples de ce que je cherche: '@ me ssh machine1 "./executeMyScript & & cd/developmentDirectory"' et il me donne ma coquille arrière.

Les raisons pour lesquelles je veux faire ceci est parce que j'utilise mrxvt (tabbed x terms) qui me permet de définir des commandes pour tous mes onglets à exécuter au démarrage. Je voudrais avoir quelques connexions SSH à la même machine, mais les faire faire des choses différentes après le sshing.

-Rob

Merci!

Répondre

10

Variation sur les autres réponses vraiment, utilisez l'option -t de ssh pour forcer l'allocation pseudo-TTY:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

merci! lors de la première inspection, cela fonctionne exactement comme je le voudrais! Vive "-t"! – robarson

+0

Même si cette question a été répondue correctement, si quelqu'un lit, savez-vous comment je peux avoir l'instance de bash que je commence avec cette commande ouvrir emacs (de sorte que lorsque je ferme emacs, il revient à mon terminal bash) ? Heck..even quelque chose qui ouvre emacs sans bash serait bon (de sorte que emacs ne quitte pas immédiatement après le démarrage). – robarson

4

Que diriez-vous

ssh [email protected] ./executeMyScript '&&' bash -i 

Vous devez citer le && il sera transmis à la machine à distance au lieu de avalée par le shell local.

Citation d'un ';' caractère et vous pouvez changer votre répertoire de départ aussi:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

Merci. L'appel à bash a fonctionné ...Infosar comme ça m'a donné une coquille. Malheureusement, cela ne fonctionne pas très bien. Les raccourcis clavier simples tels que ctrl^a ne fonctionnent pas, ce qui signifie que je dois essayer de trouver une autre solution. BTW, il imprime également "bash: pas de contrôle de travail dans ce shell". – robarson

+3

Essayez avec l'option '-t':' ssh -t me @ machine ... ' – mob

2

Mettez quelque chose comme ceci à la fin du script que vous souhaitez exécuter:

bash -li 

Cela commence Bash comme un shell de connexion interactive. Ce n'est pas parfait, puisque vous allez passer à côté de choses comme TERM, mais cela pourrait convenir à vos besoins.

S'il ne suffit pas, je venais de faire deux appels ssh séparés, l'un pour exécuter le script et un autre me connecte.

+0

+1 pour deux commandes ssh distinctes. KISS –

2

Que diriez-vous d'utiliser l'option SendEnv dans ssh_config d'envoyer un environnement spécifique option de votre machine locale à votre machine distante suivie par la vérification de cette variable d'environnement dans la configuration de l'hôte distant?

Dans votre .ssh/config-fichier spécial:

remotehost: 
    SendEnv * 

Votre script local:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

Votre .bash_profile à distance:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

Vous pourriez avoir besoin de vérifier certaines de ces lignes, je viens de jeter cela ensemble à partir des pages man et n'ai pas essayé tout cela avant. Personnellement, je n'aime pas avoir à modifier mon environnement local et distant pour cette solution.

0

Cela fonctionne pour moi.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

Pourquoi cela a-t-il fonctionné pour vous? Donnez un peu plus de détails pour que l'OP puisse comprendre pourquoi vous avez écrit ce que vous avez fait. – rayryeng

+1

C'est aussi une copie plus ou moins directe de la réponse choisie, postée il y a 4 ans ... – Synchro

+0

Une explication serait bien. –