[ITPASS2017]rsync エラーへの対処

概要

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