예상을 사용하여 원격 호스트의 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

    적절한 키 설정을 사용하면 비밀번호도 필요하지 않습니다.

관련 정보