ユーザーを切り替えた後、リモートマシンにバッチでログインし、関連するコマンドを実行する必要がある場合があります。効率が低すぎて1つずつログインできない場合は、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]のパスワード:
最終ログイン:Sun Nov 1 15:24:34 2020 from zhou1
[lv @ zhou2〜] $ su-
パスワード:
最終ログイン:Sun 11月1日15:28:18CST 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]のパスワード:
最終ログイン:Sun Nov 1 15:29:36 2020 from 192.168.245.1
[lv @ zhou3〜] $ su-
パスワード:
最終ログイン:Sun Nov 1 15:29:50 CST 2020 on pts / 0
[root @ zhou3〜] #touch a.txt
[root @ zhou3〜] #chmod 777 a.txt
[root @ zhou3〜] #cpa。 txt b.txt
[root @ zhou3〜]#[lv @ zhou1〜] $