시스템에 원격으로 액세스하고 명령을 실행할 것으로 예상됩니다.

때때로 원격 시스템에 일괄 적으로 로그인하고 사용자 전환 후 관련 명령을 실행해야합니다. 효율성이 너무 낮아 하나씩 로그인 할 수없는 경우에는 expect 스크립트를 사용하는 것이 좋습니다.

코드 쇼 :

#!/bin/bash
LANG=en
user="lv"

command1="touch a.txt"
command2="chmod 777 a.txt"
command3="cp a.txt b.txt"

for line in `cat ip.list`;do

ip=`echo $line |awk -F "," '{print $1}'`
common_passwd=`echo $line |awk -F "," '{print $2}'`
new_rootpasswd=`echo $line |awk -F "," '{print $3}'` 

/usr/bin/expect << EOF
set time 30
spawn ssh $user@$ip

expect {
"yes/no" { send "yes\r";exp_continue}
"password:" { send "$common_passwd\r"}
}

expect "]*"
send "su -\r"

expect {
"Password:" { send "$new_rootpasswd\r"}
}
expect "]*"
send "$command1\r"
expect "]*"
send "$command2\r"
expect "]*" 
send "$command3\r"

expect "]*"
send "exit\r"
EOF

done

ip.list의 텍스트 내용은 다음과 같습니다.

192.168.245.129,zhou2,Lg2=0.301!@#,
192.168.245.130,zhou3,e=2.71828!@#,

脚本 执行 结果 如下 :
spawn ssh [email protected]
[email protected]'s password :
Last login : Sun Nov 1 15:24:34 2020 from zhou1
[lv @ zhou2 ~] $ su-
Password :
Last login : Sun 11 월 1 일
15:28:18 CST 2020 on pts / 1 [root @ zhou2 ~] # touch a.txt
[root @ zhou2 ~] # chmod 777 a.txt
[root @ zhou2 ~] # cp a.txt b.txt
[root @ zhou2 ~] # spawn ssh [email protected]
[email protected]'s password :
Last login : Sun Nov 1 15:29:36 2020 from 192.168.245.1
[lv @ zhou3 ~] $ su-
Password :
마지막 로그인 : Sun Nov 1 15:29:50 CST 2020 on pts / 0
[root @ zhou3 ~] # touch a.txt
[root @ zhou3 ~] # chmod 777 a.txt
[root @ zhou3 ~] # cp a. txt b.txt
[루트 @ zhou3 ~] # [lv @ zhou1 ~] $

추천

출처blog.51cto.com/12606610/2545911