キー認証なしの SSH 経由のパスワードなし Rsync

キー認証なしの SSH 経由のパスワードなし Rsync

SSH 経由で接続する RSync ジョブを設定したいと思います。

私のコンピューター (backup@myhost) とリモート ホスト (test@remhost) があり、フォルダー ~/something とそのすべての内容をバックアップする必要があります。ssh ユーザー test は、~/ フォルダー内のすべてのファイルとフォルダーに対して読み取りアクセス権のみを持ちます。rsync を使用して、test@remhost:~/something フォルダーを backup@myhost:~/bak フォルダーにコピーします。

この目的のために、Ubuntu 11.10 (Oneiric) の BASH 経由で次のコマンドを使用します。

rsync -avz -e ssh test@remhost:~/something/ ~/bak/

Enter キーを押すと次の画面が表示されます:

test@remhost's password:

パスワードを入力すると、rsync が機能します。

上記のコマンドでパスワードを自動入力してパラメータとして渡すか、自動入力してジョブを開始するようにしたいです。

実行してみましたrsync -avz -e ssh test:password@remhost:~/something/ ~/bak/が、まだパスワードを求められ、煩わしいです。

いかなる種類のキー (RSA、DSA、またはその他のキー) についても聞きたくありません。ログインして作業を実行する単純なコマンドだけが必要です。

編集:sshd_config考えられるシナリオとしては、公開鍵認証が無効になっていて、これを変更できない場合が挙げられます。たとえば、OpenSSH を使用する場合、ファイルを編集して追加するには、サーバー上でルート権限が必要になりますPubkeyAuthentication yes

編集:最終的に私にとってうまくいったのは次の通りです:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

この方法は、パスワードをプレーンテキストで送信し、中間者攻撃に対して脆弱であるため、安全とは見なされません。セキュリティを強化するには、キー認証を使用することをお勧めします。

答え1

試してみる sshpass

使い方は簡単そうです...apt からも利用できます。

キーをコピーする前に、このようなものを探していましたが、必要な場所にはすでにキーが揃っているので、これを試す時間がありませんでした。

ただし、パスワードの可視性に関するチュートリアルの免責事項に注意してください。


これを実行する必要があるすべての人へ:

sshpass -p 'sshpassword' rsync --progress -avz -e ssh test@remhost:~/something/ ~/bak/

答え2

セキュリティ上の脅威に対してより安全なソリューションのバリエーションとしては、パスワードを厳しい権限を持つファイルに保存し、次の-fフラグを使用することですshpass

sshpass -f '/home/me/.password' rsync --progress -avz -e ssh
test@remhost:~/something/ ~/bak/

違いは、実行中のプロセスを一覧表示してもコマンド ラインにパスワードが表示されず、パスワードが格納されているファイルへのパスのみが表示されることです。

答え3

パスフレーズなしの公開鍵認証が、自動化された ssh/rsync ログインのより優れたソリューションにならない状況は想像できません。

とにかく、expectあなたがやりたいことを達成する方法があるはずです。パスワードをsshにパイプすることはできませんが、これは非常に似たものです。その方法は、答えですここはスタックオーバーフロー

答え4

これも機能します:

system <<~ "RSYNC";
    rsync \\
      --rsh="sshpass -p '$password' ssh -p 22" \\
      --archive \\
      --verbose \\
      --progress \\
      --partial \\
      --human-readable \\
      "$directory" \\
      "$options{host}:${directory}"
RSYNC

つまり、前を通り過ぎるのではなく、sshpass中を通り過ぎる--rshrsync

この方法は、環境変数の使用方法とともに、SSHPASSマニュアルの例のセクションで説明されています。

https://www.freebsd.org/cgi/man.cgi?query=sshpass&sektion=1

関連情報