예상을 사용하여 원격 호스트의 IP 주소를 바꾸는 방법

예상을 사용하여 원격 호스트의 IP 주소를 바꾸는 방법

expect원격 Linux 시스템의 IP 주소를 대체하기 위해 다음 스크립트를 작성했습니다.

perl이 작업을 수행하기 위해 한 줄을 사용합니다.

'HOME'을 읽을 수 없습니다: 해당 변수가 없습니다.라는 오류가 발생합니다.

expect요청한 IP를 변경하려면 스크립트에서 무엇을 변경해야 하는지 알려주세요 .

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

결과:

  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"
  • ksh 스크립트에서 다른 솔루션을 얻으면 기쁠 것입니다.

답변1

분명히 다음으로 $ENV확장됩니다 .$HOME/.kshrc

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

당신은 할 수

  1. Perl 라인에서 $OLD 및 $NEW를 사용해 보십시오.

  2. 기대를 포기하고 대신 일반 SSH를 사용하십시오.ssh [email protected] -- sed -i s/$OLD/$NEW/ /etc/hosts

    올바른 키 설정을 사용하면 비밀번호도 필요하지 않습니다.

관련 정보