ローカルサーバーに頻繁にバックアップを作成し、それを毎日リモートサーバーに同期します。
ターゲットサーバーは、SSHキー(パスワードなし)アクセス専用に構成されています。そのサーバーのプライマリSSHキーはパスフレーズで保護されているため、2番目のSSHキー(パスフレーズで保護されていない)+無人バックアップに使用するユーザーを作成しました -この方法で、cronの実行時にパスフレーズを入力する必要はありません。
私はcronとrsyncを使用しており、すべてのコマンドは個別に機能しますが、組み合わせると失敗します。
トラブルシューティングの実行中に私が持っている最も遠い
env -i sh -c "rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/"
エラーを返します
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.0]
これをさらにトラブルシューティングする方法に関するヒントはありますか?
これまでに試したことがありますが、アイデアがありません:
- Cronは間違いなく実行されています
ps aux | grep cron
/ var / log / syslogに異常はありません
Sep 7 13:22:01 desktop CRON[6735]: (tom) CMD (sh /home/tom/Documents/Scripts/offsite-backup)
バックアップユーザーが機能するときのターミナルでのリモートサーバーへのSSH
ssh backups-user@XX.XX.XX.XX
- ターミナルでコマンドを実行すると完全に機能します
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
backups-userキーへのパスを手動で指定しても効果がありません
rsync -lrstRO --delete --exclude 'lost+found' -e 'ssh -i /home/tom/.ssh/backups-only' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
機能していないコマンドを簡単なテストコマンドに置き換える
echo "Hello world" > ~/Desktop/test.txt
コンピューターでの叫び/宣誓は効果がありませんでした(しかし、一時的に気分が良くなりました)。
編集1:
これが私のcrontabファイルとそれが呼び出すスクリプトです。
...
# m h dom mon dow command
MAILTO=""
* * * * * sh /home/tom/Documents/Scripts/offsite-backup
そして
#!/bin/bash
rsync -lrstRO --delete --exclude 'lost+found' /Backups/auto-daily-backups/./ backups-only@XX.XX.XX.XX:/backups/desktop/
編集2:
明確にするため/var/log/auth.log
に、ターゲットサーバーには次の行が含まれています。Sep 11 08:23:01 <hostname> CRON[24421]: pam_unix(cron:session): session closed for user root
これは、1分ごとにローカルでcronを実行しなくなったため混乱していますが、サーバーログに1分ごとに新しいエントリが表示されます。サーバー上のすべてのユーザー(ルートを含む)のCrontabファイルは空で、何もしません。
また、ユーザー「backups-only」はサーバー上で作成され、権限が制限されており、専用のSSHキーがデスクトップマシンにコピーされています。コマンドを手動で実行するときにすべてが機能するため、これが方法であると想定しています。
上記のcrontabファイルは、デスクトップマシンのユーザー「tom」です。私の意図は、ユーザーに「バックアップのみ」としてサーバーにログインするスクリプトを呼び出すことです。バックアップスクリプト(コマンドを実行するのではなく)を実行してみましたが、正常に接続および動作しました。動作しないcronジョブを作成したユーザー「tom」としてデスクトップ上で実行しました。ログイン成功に対応するサーバーログの出力は次のとおりです。
Sep 11 08:35:31 <hostname> sshd[25071]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Sep 11 08:35:32 <hostname> sshd[25071]: Accepted publickey for backups-only from <desktop IP> port 54242 ssh2: RSA e2:e6:07:27:c1:continues...
Sep 11 08:35:32 <hostname> sshd[25071]: pam_unix(sshd:session): session opened for user backups-only by (uid=0)
Sep 11 08:35:32 <hostname> systemd-logind[638]: New session 12 of user backups-only.
Sep 11 08:36:00 <hostname> sshd[25133]: Received disconnect from <desktop IP>: 11: disconnected by user
Sep 11 08:36:00 <hostname> sshd[25071]: pam_unix(sshd:session): session closed for user backups-only
Sep 7 14:45:01 <hostname> CRON[18716]: pam_unix(cron:session): session closed for user root
Sep 7 16:06:02 <hostname> sshd[6747]...
ます。このログラインがサーバーからのものであり、正しい行であることを100%肯定していますか?投稿したcrontabは、バックアップ専用の crontab です。また、IDファイルを手動で追加してみてくださいrsync .... -e 'ssh -i /home/user/.ssh/identity' ...
auth.log
編集2の下に投稿したその行は、サーバーで実行されているcronのためのものであり、ログイン試行とは何の関係もないはずです。tail -f /var/log/auth.log
cronを介してスクリプトを実行しようとしているときにサーバーで試すことができますか?また、これが機能するかどうかはわかりませんが、最初のenv
コマンドを試して、rsync .... -e 'ssh -vvv -i /home/user/.ssh/identity ...
さらにエラーが発生するかどうかを確認できますか?