como executar um script local no servidor remoto usando o script expect e bash

0

Eu quero fazer um script que se conecte a um servidor e faça alguma operação CRUD no servidor e retorne novamente ao local. Eu não quero carregar o script para o servidor ..

Eu criei um script que ajudará a se conectar ao servidor, mas não posso fazer nenhuma operação com a ajuda do script.

por favor, faça minha dúvida sobre o fato de que o tempo é possível executar um script local (como no meu caso) no servidor remoto.

Se sim, por favor, especifique o roteiro, pelo qual serei grato a você.

até agora meu script é

#!/usr/bin/expect
set ip neviss
set user user
set password 1234
spawn ssh "$user\@$ip"
expect "Password:"
send "$password\r";
interact ( after this line any command is not getting executed) 
ls -lrt 
    
por user1760929 23.11.2012 / 10:24

3 respostas

2

Tente algo assim:

#!/usr/bin/expect
spawn ssh usert@server
expect "user@server's password:" {send "$password\r"}
expect "$ " {send "hostname\n"}
expect "$ " {send "ls -alrth\n"}
expect "$ " {send "exit\n"}

Não tenho certeza se é a maneira mais eficiente de fazer isso, mas parece funcionar no meu teste. (espaços depois de $)

Além disso, você pode colocar isso no topo do seu script "exp_internal 1".

Isso ajudará no processo de depuração!

    
por 23.11.2012 / 14:43
0

Você não precisa chamar o Interact para enviar um comando. O Interact aguarda sua entrada.

Aqui está um exemplo de trabalho para executar um script "test.sh" no servidor remoto (também chamando alguns outros comandos apenas para ilustrar a ideia), que também resolve o problema de prompt diferente user / root. Lembre-se de fazer o executável test.sh.

#!/usr/bin/expect

set prompt "(%|#|\$) $"
set ip neviss
set user user
set password 1234

spawn ssh "$user\@$ip"
expect "assword:"
send "$password\r";
expect -re $prompt
send -- "ls -l\r"
expect -re $prompt
send -- "./test.sh\r"
expect -re $prompt
send -- "sleep 5\r"
expect -re $prompt
send -- "exit\r"
    
por 03.03.2014 / 14:17
0

Você pode deixar ssh fazer a maior parte do trabalho. Supondo que seu script local é um script bash e está em um arquivo chamado "local.script":

#!/usr/bin/expect
set ip neviss
set user user
set password 1234
set script local.script

# here I spawn a shell that will run ssh and redirect the script to ssh's stdin

spawn sh -c "ssh $user@$ip bash < $script"

expect "Password:"
send "$password\r"

# and just wait for the script to finish
expect eof

Note que @ não é um caractere especial em Tcl e não requer escape.

    
por 27.06.2014 / 13:51

Tags