J'ai essayé cela avec espoir, mais cela n'a pas fonctionné: cela a fermé la connexion à la fin.
Pouvons-nous exécuter un script via ssh qui se connectera aux machines distantes, exécutera une commande et ne se déconnectera pas?
Alors ssh dans une machine, cd dans tel ou tel répertoire, puis exécutez une commande et restez connecté.
-Jonathan
(sauf que j'ai utilisé)
#!/usr/bin/expect -f
set password [lrange $argv 0 0]
spawn ssh root@marlboro "cd /tmp; ls -altr | tail"
expect "?assword:*"
send -- "$password\r"
send -- "\r"
interact
linux
ssh
command-line-interface
automation
Jonathan
la source
la source
Réponses:
Ajouter un
; /bin/bash
à la fin de votre ligne de commande sur le côté distant? C'est:Encore mieux, changez le .bashrc de root pour qu'il ressemble à ceci:
:)
la source
-i
à ce bash.ssh -t
d'allouer un pty.Si vous êtes d'accord avec cela en Python, pexpect a un exemple qui fait presque exactement ce que vous demandez:
Pour ce faire avec ssh au lieu de ftp, vous voudriez un code similaire au suivant (les fichiers d'exemple dans pexpect ont beaucoup plus de détails et d'informations, mais voici les bases):
Ne vous méprenez pas, j'adore attendre (en particulier autoexpect), mais le python est tellement plus facile pour moi de grogner.
la source
Le moyen le plus simple et le plus propre de ssh sur un serveur, de générer un shell interactif et d'exécuter des commandes à l'intérieur de ce shell est de créer un fichier rc personnalisé pour bash.
Dans votre fichier bashrc personnalisé sur le serveur, commencez par trouver le fichier par défaut, puis ajoutez vos commandes personnalisées, par exemple
~ / .bashrc_custom:
Vous pouvez ensuite démarrer votre session SSH comme ceci:
L'
-t
option force une allocation pseudo-tty, de sorte que des choses comme la complétion de tabulation fonctionnent.L'
--rcfile
option spécifie le fichier rc à charger au lieu de celui par défaut. Important: vous devez mettre "arguments à double tiret" sur la ligne de commande avant les options à un seul caractère pour être reconnu.L'
-i
argument de / bin / bash est là pour invoquer un shell interactif.la source
Si quelqu'un veut des informations sur ce qui se passe en arrière-plan, vous devriez jeter un œil au manuel sshd:
https://www.freebsd.org/cgi/man.cgi?sshd(8)#LOGIN_PROCESS
la source
Vous devriez généralement éviter d'utiliser ssh de cette manière car cela va à l'encontre de son objectif.
Faites un
pour voir si votre clé est répertoriée dans le pool de sessions actives ssh ou bien ajoutez-la vous-même (avec ssh-add).
la source