セキュリティ確保の視点からは、WebDAVへの自動ファイルアップロードとかはできないようにしておいた方がよいのですが、自宅のLANのような環境でファイル共有をするにあたっては、何かと便利なので自動化をしたくなります。
Linuxのcadaverを使うと、ファイルアップロードやファイルダウンロードのバッチ処理が簡単に実装できるので、定期的なファイルのアップロードなどを手軽に実装したいなー、といった用途には使えそうです。
~/.netrc に、ログイン情報などを記載しておくと、認証の手入力は不要になります。ただし、ファイルに平文で記載するので取扱い注意ということになります。サーバに侵入されてroot権を奪取されたらおしまい、ということですね。root権奪取された時点でかなりまずい状態なわけですが…。対象ホスト名がhostname、ログイン名がuser1、パスワードがsecretのときは、次のように記載します。
次に、cadaverの自動アップロード処理をbashスクリプトで記述します。次のような感じで、ヒアドキュメントを使います。webdav.shという名前で用意したとして、使うときには「$webdav.sh put filename」のようにします。特定用途なら、ヒアドキュメント内を専用の処理にすれば良いでしょう。
#!/bin/sh URL=$1; shift /usr/bin/cadaver << EOF open $URL $* quit EOF exit 0
さて、ここで自宅では自己認証局を使って証明書とかを発行しているので、そのままではcadaverは信頼できないといってプロンプトを表示してきます。このプロンプトを表示させないためには、信頼できることを伝えればいいので、自己認証局の公開鍵をシステムへ登録する必要があります。まずは、既存の証明書ファイルを探すのですが、curl-configコマンド(fedoraではcurl-devに含まれてました)を使うとすぐにわかります。ディストリビューションやバージョンによって名前や場所が違うので、注意が必要です。ca-bundle.crtということが多いようですが、Ubuntuではca-certificates.crtでした。
/etc/ssl/certs/ca-certificates.crt
ここへ、自己認証局の公開鍵(crt)を登録します。ファイルを見ればわかりますが、下記のような感じで「-----BEGIN CERTIFICATE-----」と「-----END CERTIFICATE-----」で囲まれた部分を追加します。
MIIC1zCCAkCgAwIBAgIBADANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJKUDEP
(略)
nR/LFgHG2peLhxs=
-----END CERTIFICATE-----
これでcadaverによるWebDAVへのファイルアップロードがスクリプト化できました。