キーをシステムにプッシュする前に(hosts.txt)に接続し、認証キーファイルの権限を更新する必要があるシステムがたくさんあります。
キーをプッシュできるファイルを継承し、ユーザー名/パスワードのセットで22で応答したホストのサブネットを確認し、sshが私たちのキーに接続できることを確認しました。ほとんどはExpectで書かれています。
リストを取得し、必要に応じてサブネットスキャンに応答するホストに権限(0700または0600?)をプッシュする必要があり、キーと一緒にシステムにキーをプッシュできるようになりました。
Host.txt の部分を読みながら、do/while を調べることができます。私が詰まった部分は、chmod 0700〜/.ssh/authorized_keyファイルを実行してsshをターゲットシステムにプログラムすることです(sshpassを使用するか、パスワード自動化を期待する)。
私は失敗したときにいくつかの戻りコードを見たいと思います。 (以前のシステム管理者は、時々ルートを〜/ .sshディレクトリの所有者にするか、私たちが調整している標準ユーザーの〜ディレクトリにすることがあります)。
user@host を手動で SSH に接続できます。ユーザー(およびパスワード)は同じままで、ロードするホスト.txtファイルに応じてホストのみが変更されます。手動で何百回も実行しないようにしたい。これが完了したら、Pushkey.expを使用して、変更されたすべてのシステムを自動的に(実行/同時)更新できます。
これが私が今まで得たものです:
#!/bin/bash
# Permissions fix authorized_keys, using bash
#
# Usage: ./manage_host.sh
# -----------------------------------------------------------------------------
file="/home/user1/bin/hosts.txt"
while IFS= read -r host
do
expect -f
spawn ssh remoteuser@$host
expect "assword:"
send "ourpasswordhere\r"
if [ ! -d "~/.ssh"]; then mkdir -p ~/.ssh fi
if [ ! -f "~/.ssh/authorized_keys."]; then touch ~/.ssh/authorized_keys. fi
chown -R remoteuser:remoteuser ~/.ssh
# store exit status of chown
status=$?
# Error checking subroutine to post failures on manager server
if [ $status -ne 0 ]; then echo "'$host' ownership could not be set to svcsis." >> results.txt; fi
chmod 600 ~/.ssh/authorized_keys
exit
./push_key.exp remoteuser@$host
./keycheck.sh $host >>response.txt
done