ほぼ同一の CentOS 6 サーバーが 30 台ほどあり、これらのサーバーでは、RSA キーを使用して自動的に更新された構成ファイルをプッシュアウトし、root としてログインできるようにする必要があります。通常は rsync だけですが、サーバー上でコマンドを実行する必要がある場合もあるため、ssh も必要です。これは 30 台のサーバーすべてを更新するスクリプトとして実行されるため、キーにパスフレーズを設定する必要はありません。
その部分はすべて正常に動作しています。rsa キーを作成し、それを root の authorized_keys に追加したので、パスワードを入力しなくてもサーバーに ssh または rsync できます。
authorized_keys を単一のホスト名からのキーのみを受け入れるように設定しているので、この設定は比較的安全です。ただし、まだ完全には納得していないので、このキーが使用されるたびに共有の技術メールボックスに電子メールを送信するように設定したいと思います。
これらのサーバーに自分自身としてログインし、su を実行して自分自身に root 権限を与えることがよくあります。これは問題ありません。誰かがログインするたびに技術メールボックスにスパムを送りたくはありません。SSH キーが使用されるときにのみ電子メールを受け取りたいのです。
これまでのところ、server1[through 30].example.com に次のようなものがあります:
cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher
tail -n 3 /root/.bash_profile
if [[ "${SSHKEY}" == "1" ]] ; then
echo 'Either we are getting hacked, or somebody used the SSH key on pusher to push something out to ' `hostname` ' at ' `date` | mail -s "WARNING - ROOT SSH KEY USED ON `hostname`!" [email protected]
fi
これは SSH では完璧に機能します - 自分自身として putty でログインし、su を実行してルート権限を取得すると、電子メールは受信されませんが、pusher にログインして次のコマンドを実行すると、
ssh -i /root/.ssh/server1.pri server1.example.com
メールが届きました。問題はファイルのプッシュです。次のいずれかを実行すると、
scp -i /root/.ssh/server1.pri /tmp/file.txt server1.example.com:/tmp/
rsync -e 'ssh -i /root/.ssh/server1.pri' /tmp/test.txt server1.example.com:/tmp/
まだメールが届きません。
bash_profile に頼るのではなく、キーが何らかの目的で使用されるたびに電子メールを送信するように設定する方法はありますか? (または、scp または rsync に使用される場合にのみ、キーをそれらの実行のみに制限しますか?)
答え1
悪用される可能性がある /root/.ssh/rc目的に応じて(man sshd を参照)、mailx
そこにコマンドを含めます。
答え2
~/.bash_profile は、bash が対話型ログイン シェルとして呼び出される場合に使用されます。~/.bashrc は非ログイン シェルに使用されます。ただし、攻撃者がシェル初期化ファイルをまったく読み取らないように要求する可能性があるため、そのファイルの使用は信頼できません。
答え3
sshd のマニュアル ページの「authorized_keys」セクションから:
コマンド="コマンド"
このキーが認証に使用されるたびにコマンドが実行されることを指定します。 ユーザーが指定したコマンド (ある場合) は無視されます。 クライアントが pty を要求した場合は、コマンドは pty 上で実行されます。 それ以外の場合は、tty なしで実行されます。 8 ビットのクリーン チャネルが必要な場合は、pty を要求しないか、no-pty を指定する必要があります。 コマンドをバックスラッシュで囲むことで、コマンドに引用符を含めることができます。 このオプションは、特定の操作だけを実行するように特定の公開キーを制限する場合に便利です。 たとえば、リモート バックアップのみを許可するキーなどです。 クライアントは、明示的に禁止されていない限り、TCP および/または X11 転送を指定できます。 クライアントが最初に指定したコマンドは、SSH_ORIGINAL_COMMAND 環境変数で使用できます。 このオプションは、シェル、コマンド、またはサブシステムの実行に適用されることに注意してください。 また、このコマンドは、sshd_config(5) ForceCommand ディレクティブまたは証明書に埋め込まれたコマンドによって置き換えられる場合があることに注意してください。
「from」および「environment」オプションを追加したのと同じように、そのオプションをキーに追加できます。
cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher