cómo reemplazar la dirección IP en un host remoto usando expect

cómo reemplazar la dirección IP en un host remoto usando expect

Escribí el siguiente expectscript para reemplazar la dirección IP en una máquina Linux remota

Utilizo una perlsola línea para esta tarea.

Recibo errores sobre no puedo leer "INICIO": no existe tal variable,

Por favor, indique lo que necesito cambiar en mi expectsecuencia de comandos para poder cambiar la IP solicitada.

 #!/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"
  • Estaré feliz de obtener cualquier otra solución bajo los scripts ksh

Respuesta1

Aparentemente $ENVse expande a $HOME/.kshrcen

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

Tú podrías

  1. prueba $OLD y $NEW en la línea Perl,

  2. deshazte de expect en favor de ssh simple:ssh [email protected] -- sed -i s/$OLD/$NEW/ /etc/hosts

    Con una configuración de claves adecuada, tampoco necesitarás una contraseña.

información relacionada