異なるユーザーとのrsync

AWSで2つのubuntuインスタンスを使用しています(これらにアクセスするにはpemキーを使用します)。

両方のインスタンスにrsyncを設定し、デフォルトのユーザーであるubuntu @ ipaddressを使用すると機能します。ただし、別のユーザーでrsyncを使用しようとすると(sudo su - jenkinsたとえば、またはrsyncコマンドの前にsudoと入力すると、次のエラーが発生します。

Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.0] 

私が行った手順:

jenkinsとしてログインしているときに(ssh-keygenを使用して)sshキーを作成しようとし、それを< /home/ubuntu/.ssh/authorized_keys(rsyncの実行元)と$JENKINS_HOME/.ssh/authorized_keysの両方のdivid = “02bbf14171″>

ファイル(そこからもrsyncを実行しようとしました。)

pemキーを使用して同じことを実行しようとしましたが、それも機能しませんでした。

これが私です。 「実行しようとしています

rsync -avuh --delete -e ssh jenkins@ipaddress:/var/lib/jenkins/* /var/lib/jenkins

そしてhキーファイルを使用する場合

rsync -avuh --delete -e "ssh -i path/to/key.pem" [email protected]:/var/lib/jenkins/* /var/lib/jenkins

PS:ubuntuで実行したくない唯一の理由ユーザーは、多くのことでfailed: Permission denied (13)を取得するためです(ファイルはjenkinsによって所有されているため)。

最終目標:

I 「cronjobを実行して、バックアップjenkinsインスタンスをプライマリインスタンスで常にバックアップし続けようとしています:

*/30 * * * * /usr/bin/rsync -avuh --delete -e ssh root@jenkinsprimary:/var/lib/jenkins/* /var/lib/jenkins

コメント

  • リモートホストのauthorized_keysファイルまたはrsyncコマンドを実行しているサーバーにssh-keyを追加しましたか?
  • 質問は

はっきりしていません。すべてのrsyncの実行には、ソースと宛先があります。ソースシステムと宛先システムを明確にできますか?トラブルシューティングの目的で、rsyncはsshを使用するため、rsyncではなくsshのみを使用することをお勧めします。ソースからssh-vvv jenkins @ < target >を使用して、出力をここに貼り付けてみてください。

  • 失敗する:多くの点でアクセスが拒否されました(13)(ファイルはjenkinsによって所有されているため)では、" jenkins "ユーザー?
  • I 'を作成しました(ssh-keygenを使用して)sshキーを作成しようとしましたjenkinsとしてログインし、それを/home/ubuntu/.ssh/authorized_keys(i ' mがrsyncを実行している)の両方のauthorized_keysファイルに追加しましたが、 destination システムのauthorized_keysファイルにキーを追加する必要があります。
  • 回答

    古い投稿ですが、他の人に役立つ場合に備えて…

    2つのことを区別する必要があります。

    • SSH接続を確立します
    • どのリモートユーザーがコピーするファイルを所有しています。

    概要

    (srcmachine) (rsync) (destmachine) srcuser -- SSH --> destuser | | sudo su jenkins | v jenkins 

    rsyncしたいとしましょう:

    • 差出人:
      • マシン:srcmachine
      • ユーザー:srcuser
      • ディレクトリ:/var/lib/jenkins
    • 宛先:
      • マシン:destmachine
      • ユーザー:destuserから SSH接続を確立します
      • ディレクトリ: /tmp
      • 最終ファイルの所有者:jenkins

    解決策

    rsync --rsync-path "sudo -u jenkins rsync" -avP --delete /var/lib/jenkins destuser@destmachine:/tmp 

    説明

     --rsync-path=PROGRAM specify the rsync to run on the remote machine 

    秘訣はSSH接続を確立するユーザー(iv id = “c4882b3f60)以外のユーザー(jenkins)を使用して、リモートマシンでrsyncを実行する”>

    )。

    要件

    SSHアクセス

    (srcmachine) (rsync) (destmachine) srcuser -- SSH --> destuser [~/.ssh/id_rsa] [~/.ssh/authorized_keys] <-- "id_rsa.pub" inside [~/.ssh/id_rsa.pub] 

    ~/.sshの権限を制限することを忘れないでください:

    chmod 700 ~/.ssh 

    destuser

    にはsudo -u jenkins rsyncを実行する権限が必要です。

    通常、destuserを次のように設定します。 sudoersのメンバー。これを行うには、root @ destmachine

    cat > /etc/sudoers.d/destuser << EOF destuser ALL=(ALL) NOPASSWD:ALL EOF 

    rsyncの前にテストするには、destuser @ destmachineにログオンして実行します。これ:

    sudo su jenkins echo $USER 

    返された場合:

    jenkins 

    ログに記録されていることを意味しますjenkinsユーザーとして、iv id = “7aa34de5d1″へのエスカレード特権があるため、rsyncコマンドも機能することを意味します>

    は機能します。

    悪い解決策に関する注意:宛先ユーザーとのSSH接続を確立しますjenkins

    理由 “私たちはこれをするだけですか?

    (srcmachine) (rsync) (destmachine) srcuser -- SSH --> jenkins [~/.ssh/id_rsa] [~/.ssh/authorized_keys] <-- "id_rsa.pub" inside [~/.ssh/id_rsa.pub] 

    jenkinsは「サービス」アカウントであるため、ポートを公開するサービスを実行します。 (80など)外部HTTPアクセスの場合、アクセスを取得するためにHTTPを介したJenkinsサービスを介したセキュリティ違反が発生する可能性があることを意味します。

    そのため、さまざまなサービスを実行するためのwww-dataユーザーなどがあります。公開されているポートからハッキングされた場合、多くのことを実行できません。

    • すべてが読み取り専用です。
    • /var/log/THE_SERVICEでの書き込みを除く。

    許可するjenkinsユーザーのSSHアクセスは、表面攻撃を公開します(したがって、root !!としてSSHアクセス用です)。

    さらに、別のユーザー(rootwww-dataなど)としてrsyncする場合は、をコピーする必要があります。それらのアカウントへのSSHキー公開キー(面倒)。

    適切な解決策:ユーザーアカウントへの SSHアクセスをできるだけ少なく設定する必要がありますdestuser CAN escaladate to必要な「サービス」アカウント(jenkinsrootなど)。

    回答

    別のユーザーとのrsyncで同様の問題が発生しました。次のコマンドを実行して解決しました:

    rsync -avu -e "ssh -i my-key -o StrictHostKeyChecking=no -l user-i-want-to-use-in-rsync" ./local_dir remote_host:remote-host-dir 

    別のユーザーとしてrsyncを実行するには、キーを操作する必要がある場合があることに注意してください。

    回答

    sudo -u jenkins -i rsync ... 

    引用なし。 p>

    -iオプションを使用すると、sudoコマンドがsshキー、など

    sudoのユーザーから:

    -i, --login

    ターゲットユーザーのパスワードデータベースエントリで指定されたシェルをログインシェルとして実行します。これは、.profile.bash_profile.loginなどのログイン固有のリソースファイルがコマンドが指定されている場合、コマンドはシェルの-cオプションを介して実行するためにシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます。 sudoは、シェルを実行する前に、そのユーザーのホームディレクトリに変更しようとします。コマンドは、ユーザーがログイン時に受け取る環境と同様の環境で実行されます。ほとんどのシェルに注意してください。コマンドが指定された場合、対話型セッションと比較して動作が異なります。詳細については、シェルのマニュアルを参照してください。 sudoers(5)マニュアルの「コマンド環境」セクションには、-iオプションがsudoersポリシーが適用されているときにコマンドが実行される環境にどのように影響するかが記載されています。使用します。

    回答

    同様の問題があります。
    I cronを使用してこれを解決します。ただし、cronは特定のユーザー(例:jenkins)で実行する必要があります

    cronジョブを作成するだけです:

    $ crontab -u jenkins -e 

    次に、必要に応じてcronを入力します。

    */2 * * * * sh /home/user/scp.sh 2>&1 >> /home/user/errmail.log 

    コメント

    • rsyncが認証の問題が原因で失敗しました。提案はどのように役立ちますか?

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です