Shellインタラクティブ一括でホスト名を変更する方法

1636 ワード

需要分析:
     1、ssh公開鍵はコピーして、暗号管理がないことを提供します。
     2、大量同期Hostsファイルは複数のホストに行く。
     3、ホスト名を一括で変更します。
実装:
まず、複数台のホストに同期するためのHostsファイルを編集します。

vi /etc/hosts
192.168.0.1 server1
192.168.0.2 server2
192.168.0.3 server3
192.168.0.4 server4
192.168.0.5 server5
192.168.0.6 server6
192.168.0.7 server7
192.168.0.8 server8
192.168.0.9 server9
192.168.0.10 server10
次にshellスクリプトを編集します。

vi changename.sh
#!/bin/bash
# This is a shell script to change hostname
# version 0.1
# Created in 2015.8.11
# Creator Edison
export PATH=$PATH
export USER=root
export SNAMEPRE=server
export PASSWD=test01  #    
for i in {1..10};
do /usr/bin/expect << EOF   ##     expect     yes       
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $USER@$SNAMEPRE$i
expect {
"(yes/no)?" {send "yes\r";exp_continue}
"password:" {send "$PASSWD\r"}
}
interact
expect eof
EOF
ssh $USER@$SNAMEPRE$i "sed -i s/^HOST.*/HOSTNAME=$SNAMEPRE$i/ /etc/sysconfig/network";
scp /etc/hosts $USER@$SNAMEPRE$i:/etc/hosts;
done;
ここではexpectを使って自動的な相互作用確認とパスワード入力を行います。
Expectは無料のプログラミングツール言語で、人の介入なしに自動的かつ対話的なタスクと通信するために使用されます。Expectの著者Don Libesは1990年にExpectを作成する際にExpectに対して次のように定義されています。Expectは自動的なインタラクティブ機能を実現するためのソフトウェアセットです。そのシステム管理者のスクリプトを使用してコマンドまたはプログラムに入力を提供するために作成できますが、これらのコマンドとプログラムは端末から入力されることが期待されています。一般的にはこれらの入力は手動で入力する必要があります。
締め括りをつける
以上はこの文章のすべての内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてくれると思います。