connexion SSH avec expect (1). Comment quitter attendre et rester en SSH? [dupliquer]
Question
Cette question a déjà une réponse ici:
Je voulais automatiser mes connexions SSH. L'hôte, je suis avec ne permet pas l'authentification par clé sur ce serveur, donc je devais être plus inventifs.
Je ne sais pas beaucoup sur les scripts shell, mais des recherches m'a montré la commande « attendre » et quelques scripts en utilisant pour ce but précis. Je mis en place un script et a couru, il a parfaitement fonctionné pour vous connecter.
#!/usr/bin/env expect -f
set password "my_password"
match_max 1000
spawn ssh -p 2222 "my_username"@11.22.11.22
expect "*?assword:*"
send -- "$password\r"
send -- "\r"
expect eof
Dans un premier temps, il fonctionne comme il se doit.
Last login: Wed May 12 21:07:52 on ttys002
esther:~ user$ expect expect-test.exp
spawn ssh -p 2222 my_username@11.22.11.22
my_username@11.22.11.22's password:
Last login: Wed May 12 15:44:43 2010 from 20.10.20.10
-jailshell-3.2$
Mais c'est là où les extrémités de succès.
Les commandes ne fonctionnent pas, mais il suffit d'entrer frapper fait une nouvelle ligne. Les touches fléchées et d'autres touches non alphanumériques produire des symboles tels que '^ [[C', '^ [[A', '^ [OQ', etc. [1]
Aucun autre affiche invite sauf les deux créés initialement par le script attendent. Toutes les commandes ignorées seront exécutées par mon shell local une fois attendre fois sur. Un exemple:
-jailshell-3.2$ whoami
ls
pwd
hostname
(... le temps passe, attendez ... fois sur)
esther:~ user$ whoami
user
esther:~ ciaran$ ls
Books Documents Movies Public
Code Downloads Music Sites
Desktop Library Pictures expect-test.exp
esther:~ ciaran$ pwd
/Users/ciaran
esther:~ ciaran$ hostname
esther.local
Comme je l'ai dit, je n'ai pas l'expérience de script shell, mais je pense qu'il est causé parce que je suis toujours « à l'intérieur de » attendre, mais pas « à l'intérieur de » SSH. Est-il possible de mettre fin à attendre une fois que je suis connecté, et l'ont la main sur la session SSH pour moi?
J'ai essayé des commandes comme « proche » et « sortie », après « envoyer - « \ r » ». Oui, ils font ce que je veux et attends meurt, mais il faut vindicativement la session SSH vers le bas avec elle, me laissant là où j'ai commencé. Ce que je vraiment besoin est d'attendre pour faire son travail et de mettre fin, en laissant le dos de la session SSH dans mes mains comme si je l'ai fait manuellement.
Toute aide est appréciée, merci. [1] Je sais qu'il ya un nom pour cela, mais je ne sais pas ce qu'il est. Et cela est une de ces choses effrayantes qui ne peuvent être googlé, parce que les caractères de ponctuation sont ignorés. Comme une question de côté, ce qui est l'histoire ici?
La solution
Je pense que votre problème a été résolu ici avant:
L'utilisation de passer un attendre mot de passe pour ssh
La commande que vous recherchez est interact
. Il remet le contrôle à vous / votre clavier.
Autres conseils
Je l'ai utilisé un script similaire à autologin.
J'ai utilisé « Interagir » et je retire « attendre EOF ». En faisant cela, je peux obtenir l'écran arrière afin que je puisse entrer les commandes manuellement.
expect "?assword: "
send -- "$password\r"
expect "$"
interact
mettre tous ensemble, vous connecter et de vous laisser sur la ligne de commande exactement comme si vous avez saisi manuellement
#!/usr/bin/expect -f
set ip "127.001.001.001"
set password "xxyykkx"
spawn ssh $ip -l root
expect "?assword:"
send "$password\r"
interact