Quindi volevo automatizzare i miei accessi SSH. L'host con cui sto non consente l'autenticazione della chiave su questo server, quindi ho dovuto essere più fantasioso.Accesso SSH con expect (1). Come uscire aspettare e rimanere in SSH?
Non so molto di script di shell, ma alcune ricerche mi hanno mostrato il comando 'expect' e alcuni script che lo utilizzano esattamente per questo scopo. Ho creato uno script e l'ho eseguito, ha funzionato perfettamente per accedere.
#!/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
Inizialmente, funziona come dovrebbe.
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$
Ma è qui che finisce il successo.
I comandi non funzionano, ma premere invio fa solo una nuova riga. I tasti freccia e altri tasti non alfanumerici producono simboli come '^ [[C', '^ [[A', '^ [OQ' ecc. [1]
Nessun altro prompt viene visualizzato tranne i due inizialmente creati dallo script expect. Eventuali comandi ignorati verranno eseguiti dalla shell locale una volta che si aspettano scadenze. Un esempio:
-jailshell-3.2$ whoami
ls
pwd
hostname
(... il tempo passa, si aspettano volte su ...)
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
Come ho detto, non ho esperienza shell scripting, ma penso che è causato a causa Mi aspetto ancora "dentro", ma non "dentro" di SSH. C'è un modo per terminare l'aspettativa una volta che ho effettuato l'accesso, e devo consegnarmi la sessione SSH?
Ho provato comandi come "chiudi" e "esci", dopo "invia -" \ r "". Sì, fanno quello che voglio e si aspettano che muoiano, ma vendicapo prende la sessione SSH con essa, lasciandomi indietro dove ho iniziato. Quello di cui ho veramente bisogno è di aspettarmi di fare il suo lavoro e di terminare, lasciando la sessione SSH nelle mie mani come se l'avessi fatto manualmente.
Tutto l'aiuto è apprezzato, grazie. [1] So che c'è un nome per questo, ma non so cosa sia. E questa è una di quelle cose spaventose che non possono essere consultate, perché i caratteri di punteggiatura sono ignorati. Come una domanda a parte, qual è la storia qui?