私はほぼ200台のサーバーのアクティブアカウントを必要とする新しい契約を始めました。セキュリティで30日間アクティビティがない場合は、アカウントがロックされ、アカウントのロックが解除されてから1時間以内にログインしないと、アカウントはロックされます。
すべてがロックされるのを防ぐために、サーバーリストを実行し、自分のユーザー名とパスワードでログインしてからログアウトするスクリプトを作成したいと思います。
ほとんどのシステムでRHEL 5を実行し、一部のOEL 6も実行します(ほとんどRHEL5)。
トピックをインターネット検索すると、SSH keygenのトピック(私たちが持っているか使用している)が引き続き表示されますが、ネットワークの問題があって移動する必要がある場合に備えて、私のユニバーサルアカウントが他のサーバーで常にロックされていないことを願っています。直接ログインしてください。
答え1
を使用することをお勧めしますpssh
。 SSHにはパスワード転送、並列処理、エラー処理などの機能が組み込まれています。これは良い車輪なので、他の車輪を作る必要はありません。
答え2
user1
あなたのユーザー名は200台のコンピュータで同じであると仮定します。
まず、マシン(マシン1など)に公開SSHキーを作成します。
ssh-keygen -t rsa
ログイン後に初めてsshコマンドを実行するたびに、パスワードの入力を求められます。つまり、複数のコマンドssh
またはscp
コマンドの場合は一度だけ入力できます。ただし、完全にパスワードなしでアクセスするには空白のままにできます。
ネットワーク上にある場合は、すべてのIPアドレスをで使用できます/etc/hosts
。
IPアドレスまたはホスト名のリストを取得し、ホスト名のみを含むファイルに保存できます。
私のものIPリストファイル.txt次のように。
192.168.1.11
192.168.1.12
公開鍵を生成したら、user1
ネットワーク上のすべてのコンピュータにコピー(例:)します。
while read ip; do
ssh-copy-id -i ~/.ssh/id_rsa.pub user1@$ip
done < IPlistfile.txt
(この手順で以下の回避策のいずれかを使用しない限り)各IPのパスワードを手動で入力する必要がありますが、これによりパスワードを使用せずにすべてのシステムでスクリプトを実行できます。
これで、スクリプトを使用してすべてのシステムにSSHで接続し、定期的にログアウトできます。
while read ip; do
ssh user1@$ip
exit
done < IPlistfile.txt
上記のスクリプトは、cronjob
ユーザーアカウントをロックすることなく、必要に応じてサーバーにログインしてログアウトするために定期的に実行できます。
私の質問に対する答えを参照してくださいネットワーク上のscpを自動化するスクリプトそれはあなたにもっとアイデアを与えるでしょう。
答え3
RSAキーが最善の解決策ですが、それを使用できない場合は、次expect
の醜いハッキングを実行する必要があります。
#!/usr/bin/expect
set timeout 60
#set maxSpawn 20
if { $argc >= 2 } {
set user [lindex $argv 0]
set pass [lindex $argv 1]
set cmd ""
for {set i 2} {$i < $argc} {incr i 1} {
append cmd "[lindex $argv $i] "
}
#puts $cmd
} else {
exit
}
log_user 0
spawn sh -c "$cmd"
log_user 1
expect {
"$user:" {
send "$pass\n";
#exp_continue;
expect {
"Sorry" { exit }
"assword:" { send "$pass\n"; exp_continue; }
"$user: " { send "$pass\n"; exp_continue; }
timeout { exit }
eof { exit }
default { exp_continue; }
}
}
"assword:" {
send "$pass\n";
#exp_continue;
expect {
"Sorry" { exit }
"assword:" { send "$pass\n"; exp_continue; }
"$user: " { send "$pass\n"; exp_continue; }
timeout { exit }
eof { exit }
default { exp_continue; }
}
}
"(yes/no)?" {
send "yes\n";
exp_continue
}
"\[Y/n\]\?" {
send "y\n";
exp_continue
}
eof { exit }
timeout { exit }
default { exp_continue; }
}
ssh.expとして保存し、次を実行します。
ssh.exp your_username your_password ssh server exit