単一コマンドで複数のSSHセッション

単一コマンドで複数のSSHセッション

あるサーバーから別のサーバーにデータベースをコピーしようとしています。次のコマンドを試しましたが、SSHパスワード入力に関連しています。あるサーバーのパスワードを入力すると、他のサーバーに対して苦情が表示され、その逆も同様です。

ssh root@server1 mysqldump --databases db | ssh root@server2 mysql

ダンプを自分のコンピュータに一時的に保存して転送を完了しましたが、それを機能させる方法があるかどうか疑問に思いました。

ベストアンサー1

パスワードプロンプトは面倒です。 SSHをより便利にする方法は、認証にキーを使用し、ssh-agentセッションごとに1回(オプションのタイムアウトを含む)キーを登録できるキーエージェント()を実行することです。その後、直接実行できます。

ssh root@server1 mysqldump --databases db | ssh root@server2 mysql

server1からserver2にログインできる場合は、2つのサーバー間でデータを直接転送する必要があります。

ssh root@server1 'mysqldump --databases db | ssh root@server2 mysql'

(またはserver2からserver1にログインできる場合はその逆)。同様に、認証用のSSHキーがあります。ローカル コンピュータで server1 へのアクセスを提供する SSH 秘密鍵と、server2 へのアクセスを提供する SSH 秘密鍵を登録します。プロキシ転送が有効になっていることを確認してください(AgentForwarding yes~/.ssh/config

パスワードを入力する必要がある場合は、最善の方法は最初に接続を確立してからデータを送信することです。新しいOpenSSHバージョンを使用すると、マスター接続を開いてスレーブ接続をルーティングできます。スレーブ接続には追加認証は必要ありません。あなたの~/.ssh/config

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

両方のサーバーへの基本接続を開始します。

ssh -N -M root@server1 &
ssh -N -M root@server2 &

次に、次をコピーします。

ssh root@server1 mysqldump --databases db | ssh root@server2 mysql

その後、不要になった場合は、基本接続を終了できます。

ssh -O exit root@server1
ssh -O exit root@server2

おすすめ記事