proxy を避けて cvsup したい

研究室のマシンにFreeBSDインストール中。他に*BSDで動いているのがないので、試行錯誤ばっかり。

portsツリーはcvsupで同期をとりたいけど、ホストが置かれているセグメントでは直接学外と通信できない。基本的にcvsupはproxyを通せないし、SOCKSサーバは動いてない。「学内にミラーサーバ置いてくれい!」と叫びたくなる。
で、数時間いろいろ試した末の答え。

  • 適当なホストでsshトンネリングをする。

ありきたり。でも、cronで実行したいので、パスワード入力が邪魔。自動ログインできる方法を探ってたら、sshに -i というオプションがあった。終了時にsshを自動的に切るのも、sleepコマンドをリモートホスト上で実行するようにすれば、sleep中にcvsupのコネクションがあるとcvsup終了までコネクションを維持してくれて、自動的に切ってくれる。

つうわけで、基本的にこんな形のスクリプトを書いておいて、cronでスケジューリングすればいい。

#!/bin/sh
ssh -f -L 15999:cvsup.jp.freebsd.org:5999 -i keyfile rhost sleep 60
cvsup -g -L 2 -z -h localhost -p 15999 cvsup-supfile

-i オプションで指定するファイルは、sshでログインするホスト上で ssh-keygen を実行し、パスフレーズなしで吐き出された鍵情報のうち、秘密鍵のほうをローカルにコピーしてくる。秘密鍵なので、扱いには十分注意が必要。