IT pass HikiWiki - [ITPASS2017]rsync エラーへの対処 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

= 概要

* tako への rsync 失敗問題
  * tako の OS アップグレード後, cron によるバックアップ(rsync)に失敗するようになった
* 公開鍵認証の公開鍵の設定を変更することで解決
  * 参考にした WEB ページ((<URL:http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html>))
* 作業日
  * 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