LoveVector の、タグ ssh に関係のある記事群です。
FreeBSD 6.0 が入ったので,FUSE が使えるゾ。sshfs が使えるゾ。
# portinstall sysutils/fusefs-sshfs
# /usr/local/etc/rc.d/fuse.sh start
# sysctl vfs.usermount=1
% mount_fusefs auto /path/to/mnt sshfs user@example.jp:/path/to/mnt
なんの問題もなく通ったよ。ワーイ。これで Linux のひとたちに「shfs も使えないのかよププ」と後ろ指を指されても胸を張って生きれそうです(本当か?)。
ただ,/dev/fuse* がデフォルトでは root:operator で 660 なので,operator しかマウントできないのですよね。FAQ によるとこれを緩めるためには devfs rule add path 'fuse*' mode 666 とすれば良いらしいのだけど,これをやるとなぜか刺さってしまう。原因不明(というかあまり調べてない)。まぁ仕方ないので今のところ operator じゃない人には泣いてもらおう。:p
隔離環境から遠隔地の samba を参照するときのメモ。NetBIOS over ssh や NetBIOS over SSH port forwarding の焼き直し。
ただ,ちょっと状況が違って,以下のような感じ:
Solution は以下。
遠隔地のNetBIOSとLAN内のNetBIOS両方を使う の手順 2, 3, 4 を踏み,Loopback Adapter を作成する。勢いあまってこの接続のアドレスを DNS に登録する
のチェックを外さない。以下,割り振ったアドレスを 192.168.100.1 と仮定。
ssh -D 1080 相当の接続を mid.example.jp に。-D については ssh を SOCKS proxy として使う あたりがわかりやすい。ここでは pfwd を利用。
[SSH]
Host=mid.example.jp
Port=22
Compression=1
ProtocolVersion=2
PrivateKey=path\to\id_dsa.ppk
User=user
[FORWARD]
01=D1080
こんな INI を pfwd に食わせれば OK。これでタスクトレイに常駐してくれる。
先に挙げたリソースでは stone を使ったり plink にパッチを当てて利用したりしているけども,今では PuTTY 単体で可能。OpenSSH と違って,-L192.168.100.1:139:localhost:139 みたいにこっち側で LISTEN するアドレスも指定できる。
こっちも pfwd を使いたいけど,Proxy サーバを指定するやり方が不明なのでできなかった。まぁ仕方ないので,普通に PuTTY でシェルまで立ち上げてしまおう(plink でもいいけど)。接続は localhost:1080 の SOCKS5 経由,トンネリングの設定で L192.168.100.1:139:localhost:139 を追加して fs.example.jp へ ssh。
あとは接続後に \\192.168.100.1 にアクセスすれば OK。
しかし,なんだか不安定だなぁ。explorer が応答を失すること多々。うまくいく時といかない時があるのでよくわからないけども(あまりよく SMB わかってない)。
ふと自宅とオフィスの Firefox のプロファイルを同期したくなりました。ブックマークだけを同期するのであれば,Bookmarks Synchronizer などの拡張を利用すれば良いのですが,userContent.css をちょっと書き換えただとか,新しい拡張をつっこんだだとか,新しい GreaseMonkey スクリプトをつっこんだだとか,そういうことがちょこちょこあるもので。
いろいろと手段を探しましたがなかなか見つからなかったので,プロファイルディレクトリそのものを同期しにいく戦法をとりました。同期には unison を用い,PuTTY に付属している plink を利用して ssh 経由で行います。
今回の状況設定は以下の通り:
かんたんに図式化するとこんなかんじ:
office || home
┌────┐ ┌────┐ || ┌────┐
│Windows │SMB │FreeBSD │unison via SSH│Windows │
│ (Fx) ---------> ○ <-------------------> ○(Fx)│
└────┘ └────┘ || └────┘
||
まず,プロファイルの設定をいじります。キャッシュを同期するのはあまり嬉しくなさそうなので,キャッシュの保存先をプロファイルディレクトリの外に設定します。これは,browser.cache.disk.parent_directory に設定されています。
user_pref("browser.cache.disk.parent_directory",
"C:\\Documents and Settings\\user\\Local Settings\\Temp");
# unison 側の設定で同期させないって戦法もあります。
さらに,オフィスは proxy 経由で,自宅は直通で外に出ることになっており,設定が異なるという問題があるのですが,幸いにしてオフィスは wpad(自動設定)が効いているので,自宅/オフィスどちらも「このネットワークのプロキシ設定を自動検出する」にして解決。
続いて unison のバイナリを用意します。注意する点は,インストールする二つの unison のバージョンが一致していなくてはならないことでしょう。
オフィス側ではさっくりと # portinstall net/unison でインストール。2005/10/15 現在,バージョン 2.13.16 がインストールされます。
次に Windows 側。Cygwin を利用するか否かといった選択肢がありますが,現在のところ Cygwin から利用できる 2.13.16 バイナリは無いようでしたので,素直に Cygwin を利用しない通常の Win32 バイナリを利用します。
unison への引数でごちゃごちゃと指定してもいいですが,長くなりそうなので新しい設定ファイルを書いてしまいましょう。環境変数 HOME を適当に指定し(例えば HOME=d:\home\user),~/.unison の中に拡張子 prf の適当なファイル(ここでは share.prf)を以下のように作ります。
root = d:\home\user\work\shared
root = ssh://office.example.jp/work/shared
sshcmd = d:\home\user\.unison\plink.bat
fastcheck = true
contactquietly = true
silent = true
auto = true
最初に現れた二つの root を同期します。fastcheck は日付の比較によりチェックを簡単化するおまじない,silent は quiet モードのことで,contactquietly は「サーバーに接続しています」メッセージの省略,auto は(非エラー時の)問い合わせの省略。これとは別に,エラー時にも止まらずに終わる batch というのもありますが,ここでは指定していません。
sshcmd には ssh 接続に利用するコマンドを記述します。ここでは plink 経由で起動するので,それらの設定を含めたバッチファイルを指定しています。plink.bat の内容は以下:
@d:\path\to\plink.exe user@office.example.jp -i d:\home\user\.ssh\id_dsa.ppk -ssh unison -server
plink に接続先と秘密鍵の位置を指定してリモートで unison -server を実行します。最初の @ はその行自体のエコーを抑制するもので,外すと unison が怒りますので忘れずに。
実行の前に,pageant を使って該当秘密鍵のパスフレーズを登録しておきます。例えば,スタートアップとかで d:\path\to\paageant.exe d:\home\user\.ssh\id_dsa.ppk を実行し,登録を済ませておいたりすると幸せになれます。
あとは,% unison.exe share で同期されます。はいお疲れ様。初回だけはごにょごにょと確認がありますが,まぁ適当にやりましょう。
実際にやってみると,Firefox の実行中はロックファイルみたいなものがあるらしくエラーが起こってしまいます。作業後の同期では,事前に Firefox を落としておく必要がありそうです。
問題は最初の(自宅に帰ってきたときの)同期をいつ行うかですかね。例えばスタートアップで自動化するとなると,前述の pageant の登録後に動いてくれないといけないのであまりうまくいきません。まぁ,ネットワークにつながっていないときもあるし,必ずしも毎回同期して欲しいわけでもないので,手動でいいかなという気もしますが(現在は手動)。
# とまぁ色々書きましたが,実際のところはすでに unison で同期をとってあった shared ディレクトリの中にプロファイルを移しただけだったりします。:p