2010-05-12 6 views
6

Więc chciałem zautomatyzować moje loginy SSH. Host, z którym korzystam, nie zezwala na uwierzytelnianie klucza na tym serwerze, więc musiałem być bardziej pomysłowy.Logowanie SSH z oczekiwaniem (1). Jak wyjść i oczekiwać na SSH?

Nie znam się na skryptach powłoki, ale niektóre badania pokazały mi polecenie "oczekiwać" i niektóre skrypty używające go do tego celu. Przygotowałem skrypt i uruchomiłem go, działało idealnie, aby się zalogować.

#!/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 

Początkowo działa tak, jak powinien.

Last login: Wed May 12 21:07:52 on ttys002 
esther:~ user$ expect expect-test.exp 
spawn ssh -p 2222 [email protected] 
[email protected]'s password: 
Last login: Wed May 12 15:44:43 2010 from 20.10.20.10 


-jailshell-3.2$ 

Ale tam kończy się sukces.

Polecenia nie działają, ale naciśnięcie klawisza Enter powoduje tylko utworzenie nowej linii. Klawisze strzałek i inne niealfanumeryczne klawisze tworzą symbole takie jak '^ [[C', '^ [[A', '^ [OQ' itp.] [1]

Nie pojawia się żaden inny monit z wyjątkiem dwóch początkowo utworzonych przez skrypt oczekiwania. Wszelkie ignorowane polecenia będą wykonywane przez moją lokalną powłokę, gdy tylko przekroczą limit czasu. Przykład:

-jailshell-3.2$ whoami 
ls 
pwd 
hostname 

(... Czas mija, oczekiwać razy na ...)

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 

Jak powiedziałem, nie mam doświadczenia skryptów powłoki, ale myślę, że to jest spowodowane tym, że Nadal "wewnątrz" oczekuję, ale nie "wewnątrz" SSH. Czy istnieje sposób, aby zakończyć, spodziewając się, że po zalogowaniu się mam przekazać mi sesję SSH?

Próbowałem już poleceń takich jak "zamknij" i "zakończ", po "send -" \ r "". Tak, robią, co chcę i oczekują śmierci, ale mściwie zabierają sesję SSH, zostawiając mnie z powrotem tam, gdzie zacząłem. To, czego naprawdę potrzebuję, to oczekiwać, że wykonam swoją pracę i zakończę, pozostawiając sesję SSH z powrotem w moich rękach, tak jakbym robił to ręcznie.

Cała pomoc jest doceniana, dzięki. [1] Wiem, że jest na to nazwa, ale nie wiem, co to jest. I jest to jedna z tych przerażających rzeczy, których nie można znaleźć w Google, ponieważ znaki interpunkcyjne są ignorowane. Jako pytanie uboczne, jaka jest ta historia?

Odpowiedz

2

Użyłem podobnego skryptu do autologin.

Użyłem "interakcji" i usunąłem "oczekuj eof". W ten sposób mogę odzyskać ekran, aby ręcznie wprowadzić polecenia.

expect "?assword: " 
send -- "$password\r" 
expect "$" 
interact 
0

oddanie to wszystko razem, logowania się i zostawiają cię w wierszu poleceń dokładnie tak, jakby został wpisany ręcznie

#!/usr/bin/expect -f 
set ip "127.001.001.001" 
set password "xxyykkx" 
spawn ssh $ip -l root 
expect "?assword:" 
send "$password\r" 
interact