私は、さまざまな地域の多くのサーバーで実行されるユーティリティシェルスクリプトを生成する必要がある状況に直面しました。目的は、ローカルのmysqlデータベースをダンプして別のサーバーにコピーし、mysqlをリモートサーバーのデータベースにエクスポートすることです。
スクリプトはこの目的のためにユーザーの入力を読み取ります。
問題は、次のものより多く開かないでください。一つ同じサーバーへのSSH接続、つまりスクリプトはSSHパスワードを何度も要求しないでください。
また、いくつかの制限があります。 SSHを変更できません。コントロールマスターそしてサーバーは持つことができませんSSHパスインストールする。また、一部のサーバーは私たち自身のものではなく、私のスクリプトが外部サーバーで追加の変更なしにスタンドアロン方法である必要があるため、すべてのサーバーにキーを追加することはできません。
私が従ったステップは次のとおりです。
- mysqldump を使用してデータベースをエクスポートします。
- それから私はSCP.sqlファイルをターゲットコンピュータに転送します。
- 私はmysqlインポートルーチンを使用して新しい.shファイルを生成します。
- 次に、.shファイルを渡して実行するターゲットサーバーへの新しいSSH接続を開きます。
- SQLファイルと一時shファイルをクリーンアップしました。
単一のセッションを使用してこれらすべてを実行できるこのルーチンを実行するより良い方法を知っている人はいますか?
答え1
制限はユーザーエクスペリエンスに焦点を当てているようです(パスワードを入力し続ける必要はありません)、ここで最善の方法はターゲットファイル(.pub
フォルダ内のファイル)に公開キーを入力することです。~/.ssh
~/.ssh/authorized_keys
ここのフォルダーは、~
ソースコンピューターとターゲットコンピューターのユーザーのホームページを表します。
で承認されている場合userA@machine1
にのみuserB@machine2
SSH接続を開くときにパスワードは必要ありません。許可は完全に非対称暗号化を介して行われるため(承認されたユーザーのみが自分の秘密鍵を保持する必要があるため)、パスワードは必要ありません。userA@machine1
userB@machine2
これにより、コマンドはまだ2つの接続になりますが(同時には接続されず、常に一度に1つずつ接続されます!)、両方とも完全にパスワードがありませんscp
。ssh
サーバーにアクセスできない場合は、管理者に公開鍵ファイルの追加を依頼する必要があります。関連するすべてのシステムには単一の公開鍵ファイルのみが必要です。
私は実際にほぼ同じこと(ssh
ダンプをトリガーしてからscp
MySQLデータベースを使用してコピーすること)を実行するcronjobを直接実行します。興味深い偶然の一致です。 ;)