
サーバーにログインし、サーバーからディスク使用量を取得し、私に電子メールを送信し、サーバーを終了するシェル スクリプトを作成したいと思います。また、可能であれば毎日実行します。これが私の持っているものです:
#!/usr/bin/bash
ssh -p 1111 [email protected]
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at: $CURRENT%
EOF
fi
シェル スクリプトの名前は example.sh です。実行すると、パスワードの入力を求められますが、ログインしても何も起こりません。
答え1
まず、パスワードなしでリモート システムにログインするために使用する公開キーを生成します。
ssh-keygen -t rsa -b 4096 -C "your_username"
~/.ssh/
これにより、ユーザー名をラベルとしてディレクトリに 4096 ビットの RSA キーが生成されます。次に、この新しいキーを ssh-agent に追加して、SSH 経由で接続するときに使用されるようにします。
ssh-agent -s
ssh-add ~/.ssh/id_rsa
キー生成中にカスタム名を設定した場合は、id_rsa
その名前に置き換えます。
次に、公開鍵の内容をクリップボードにコピーします。
clip < ~/.ssh/id_rsa.pub
次に、リモート サーバーにログインし、リモート ユーザーのファイルを編集します。ssh -p YOURPORT [email protected]
authorized_keys
vim .ssh/autorized_keys
クリップボードにコピーした内容を貼り付けます。これにより、証明書を使用する代わりにパスワードなしでコンピューターからリモート ホストに接続できるようになります (通常、証明書の方がはるかに安全です)。
example-script.sh
ここで、リモート ホストのホーム ディレクトリにスクリプト を作成する必要があります(chmod a+x example-script.sh
後で必ず実行可能として設定してください)。
#!/usr/bin/env bash
CURRENT=$(df / | awk '/\// { print $5}' | sed 's/%//g')
mail -s 'Disk Space Alert' [email protected] << EOF
Disk usage is at: $CURRENT%
EOF
次に、ローカル ホーム ディレクトリにスクリプトを作成し、local-script.sh
後でコマンドを簡単に実行できるようにします (繰り返しますが、後で実行可能にすることを忘れないでください)。
#!/usr/bin/env bash
ssh -P YOURPORT [email protected] ./example-script.sh
このスクリプトを使用する./local-script.sh
と、ホーム ディレクトリから 1 行でリモート スクリプトを実行できます。次に、これをファイルにエイリアスとして追加して.bashrc
、実行するlocal-script
か、必要な他のエイリアスを実行できます。絶対パス ( /home/your_username/local-script.sh
) を使用して、crontab
毎日特定の時間に実行することもできます。
答え2
まず、何も起こらない理由を説明します。おそらく構文が原因です。ssh コマンドは の形式です。ssh server
これは、ログインして、対話的にいくつかのコマンドを手動で入力する場合のみです。ただし、ログイン後にいくつかのコマンドを自動的に実行したい場合は : を実行する必要があります。次の行に をssh server somecommand
単に記述するだけではsomecommand
機能しません。
ディスク容量情報をいつでも電子メールで送信でき、同時に電子メールのスケジュール設定もサポートするシステムが必要な場合は、次の 3 つの部分から成るシステムをお勧めします。
- ディスク情報と電子メールロジックを取得するサーバー上の1つのスクリプト。例:
/home/yourusername/script.sh
- script.shを実行するためのcrontab
- 気まぐれなリクエストの場合は、SSHでスクリプトを実行できます。
スクリプト
これは、たとえば /home/yourusername/script.sh にサーバー上に配置したスクリプトです。
#!/bin/bash
s="Disk Space Alert: $(df / | grep / | awk '{ print $5}')"
mail -s $s [email protected]
# Feedback
echo $s
sed
単に sign を削除しただけなのでを削除しました%
が、後でそれを再度追加していました。これは sed の冗長な使用と思われるため、削除しました。
次に、ディスク使用量の情報を件名にちょうど収まるように圧縮しました。これがうまくいかない場合は、もちろん元の形式に修正できますが、いずれにしても全員に知らせてください。そうすれば、エラーなどがあったかどうかを知ることができます。
クローンタブ
サーバーのcrontabを編集します。たとえば、サーバーにsshで接続し、次のコマンドを実行します。
$ crontab -e
ご存知のとおり、フォーマットは
# m h dom mon dow command
毎日午前8時に
0 8 * * * /home/yourusername/script.sh
すでにスクリプトをテストして、メール送信が機能することがわかっている限り、crontabはスクリプトを実行し、毎日午前8時にメールを送信します。
ディスク情報を電子メールで受け取るための任意のリクエスト
sshでスクリプトコマンドを最後に追加します
ssh -p 1111 [email protected] /home/yourusername/script.sh
これは ssh 構文を使用するssh server somecommand
ため、ログインし、任意のコマンドを実行し、結果をローカルの標準出力に返します。
フィードバック ラインがあるため、電子メールで通知されるだけでなく、メッセージも表示されるのでDisk Space Alert: ...
、少なくともスクリプトが実行されたかどうかの即時フィードバックが得られます。