[ITPASS2017]rsync エラーへの対処
概要
- tako への rsync 失敗問題
- tako の OS アップグレード後, cron によるバックアップ(rsync)に失敗するようになった
- 公開鍵の設定を変更することで解決
- 作業日
- 2018/04/04
- 作業者
- 高橋, 塩尻
cron からのエラーメッセージ
- 件名
Cron <root@ika-itpass> cd / && run-parts --report /etc/cron.local/daily |mail -s "`hostname -f` daily run outputs" itpadmin@itpass.scitec.kobe-u.ac.jp
- 内容
/etc/cron.local/daily/230_rsync_itpassbk: Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.2] Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.2] Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.2] Permission denied (publickey). rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(235) [sender=3.1.2]
作業内容
参考 : [ITPASS2017]サーバ交換作業 1 週間後に行う作業
ika-itpass 側での公開鍵作成
バックアップのための公開鍵を作成する.
ika-itpass:$ sudo -s -H ika-itpass:# cd /root ika-itpass:# ssh-keygen -t rsa -b 4096 (鍵の置き場はデフォルトの /root/.ssh/id_rsa とする) (鍵の強度を上げるため, -b 4096 のオプションをつけている) (パスフレーズは空にする)
tako-itpass 側の鍵の設置
ika-itpass で作成した公開鍵 ika-itpass:/root/.ssh/id_dsa.pub を tako-itpass:/root/.ssh/authorized_keys の最後尾に追記 (ファイルがない場合は作成する.). ここで ika-itpass から直接追記しようとすると, tako-itpass 側の root パスワードが必要になるので, 一旦 tako-itpass の自分のディレクトリに鍵を置いた後, tako-itpass で root となり authorized_key に追記する.
tako-itpass: # cat ./id_rsa.pub >> /root/.ssh/authorized_keys
更にパーミッションを変更する.
tako-itpass: # chmod 600 /root/.ssh/authorized_keys
authorized_keys の編集
このままでは ika-itpass で root を取られると tako-itpass もそのまま乗っ取られることが考えられるため, 公開鍵認証の際にはバックアップ以外の動作をできないよう, また ika-itpass 以外からのアクセスを受け付けないよう制限をかける. そのために, 上記で設置した authorized_keys 内の tako-itpass の公開鍵の行の冒頭に以下を加えた. なお, 見やすさのため改行してあるが, 一行で書くこと. またカンマの前後に空白は開けないこと. そして, 最後の "no-agent-forwarding" と公開鍵の冒頭に書いてある "ssh-dss" または "ssh-rsa" の間には空白を一文字入れること.
command="rsync --server -vvvlogDtpre.iLsfxC --delete . /home/",no-pty, from="133.30.109.22",no-port-forwarding,no-X11-forwarding,no-agent-forwarding
これをauthorized_keys 内の tako-itpass の公開鍵の行の冒頭に加える.
変更点メモ
参考 : <URL:http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html>
- command="" の表現
- rsync がリモートで rsync を起動する際のコマンドラインを -vv オプションをつけて調べた
ika-itpass# rsync -av -vv --delete gate tako-itpass.scitec.kobe-u.ac.jp:/home/ | lv
- from=""の表現
- ika-itpass.scitec.kobe-u.ac.jp => 133.30.109.22
- 原因は不明だが IP アドレス以外の表現だとエラーになった
- 変更前の表現
- 参考用
command="rsync --server -vvlogDtpre.iLsf --delete . /home/",no-pty, from="ika-itpass.scitec.kobe-u.ac.jp",no-port-forwarding, no-X11-forwarding,no-agent-forwarding
tako-itpass 側の通信許可
最近の OpenSSH では, デフォルトでは root のログインを許可しないため, 設定を変更する. /etc/ssh/sshd_config の
PermitRootLogin no
という部分を
PermitRootLogin forced-commands-only
に変更したのち,
tako-itpass# systemctl restart sshd
として設定を反映させる.
確認
- エラーを出していた /etc/cron.local/daily/230_rsync_itpassbk を実行し, 成功することを確認
ika-itpass:# cd /etc/cron.local/daily ika-itpass:# ./230_rsync_itpassbk
Keyword(s):
References:[[ITPASS2017]サーバ交換作業 1 週間後に行う作業] [[ITPASS2017]2017年度サーバアップグレードログ(tako)] [[ITPASS2017]2017年度サーバ構築マニュアル] [[ITPASS2018]サーバ交換作業 1 週間後に行う作業] [[ITPASS2020]サーバ交換作業 1 週間後に行う作業] [[ITPASS2021]サーバ交換作業 1 週間後に行う作業] [[ITPASS2022]サーバ交換作業 1 週間後に行う作業] [[Memo2021][ITPASS]サーバ交換事作業 1 週間後に行う作業] [[Memo2022][ITPASS]サーバ交換事作業 1 週間後に行う作業]