connexion SSH avec expect (1). Comment quitter attendre et rester en SSH? [dupliquer]

StackOverflow https://stackoverflow.com/questions/2823007

  •  26-09-2019
  •  | 
  •  

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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top