como substituir o endereço IP no host remoto usando esperar

2

Eu escrevi o seguinte script expect para substituir o endereço IP na máquina Linux remota

Eu uso um perl one-liner para essa tarefa

Eu recebo erros sobre não consigo ler "HOME": nenhuma variável,

Por favor, informe sobre o que eu preciso mudar no meu script expect para que eu possa mudar o IP solicitado?

 #!/bin/ksh


 expect_transfer='cat << EOF
 set timeout -1
 spawn  ssh  12.219.102.43
       expect {
                 ")?"   { send "yes\r"  ; exp_continue  }

                 word:  {send pass123\r}
              }
  expect #  {send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$ENV{OLD}\E/$1$ENV{NEW}$2/' /etc/hosts\r"}
  expect #    {send exit\r}
  expect eof
  EOF'


  expect -c  "$expect_transfer" 

resultados:

  spawn ssh 12.219.102.43
  [email protected]'s password: 
  Last login: Sun Aug  4 12:29:25 2013 from 12.219.102.43
  [root@localhost ~]# can't read "HOME": no such variable
  while executing
   "send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$HOME/.kshrc{OLD}\E/$HOME/.kshrc{NEW}/' /etc/hosts\r""
  invoked from within
  "expect #  {send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$HOME/.kshrc{OLD}\E/$HOME/.kshrc{NEW}/' /etc/hosts"
  • Terei prazer em obter qualquer outra solução nos scripts do ksh
por maihabunash 04.08.2013 / 11:29

1 resposta

2

Aparentemente, $ENV é expandido para $HOME/.kshrc em

send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$HOME/.kshrc{OLD}\E/$HOME/.kshrc{NEW}/' /etc/hosts\r

Você poderia

  1. experimente $ OLD e $ NEW na linha Perl,
  2. ditch espera em favor do simples ssh: ssh [email protected] -- sed -i s/$OLD/$NEW/ /etc/hosts

    Com uma configuração adequada de chaves, você não precisa de uma senha.

por 04.08.2013 / 12:05