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
コメント
回答
古い投稿ですが、他の人に役立つ場合に備えて…
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アクセス用です)。
さらに、別のユーザー(root
、www-data
など)としてrsyncする場合は、をコピーする必要があります。それらのアカウントへのSSHキー公開キー(面倒)。
適切な解決策:ユーザーアカウントへの SSHアクセスをできるだけ少なく設定する必要があります(destuser
) CAN escaladate to必要な「サービス」アカウント(jenkins
、root
など)。
回答
別のユーザーとの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
が認証の問題が原因で失敗しました。提案はどのように役立ちますか?
はっきりしていません。すべてのrsyncの実行には、ソースと宛先があります。ソースシステムと宛先システムを明確にできますか?トラブルシューティングの目的で、rsyncはsshを使用するため、rsyncではなくsshのみを使用することをお勧めします。ソースからssh-vvv jenkins @ < target >を使用して、出力をここに貼り付けてみてください。