とあるサーバー(FreeBSD)にセキュアな接続がしたいのだが、sshd が動いていない。 一般ユーザーで sshd がうまく動くのか実験。
インストールしたのは openssl-0.9.6 + openssh-2.3.0p1(zlib はインストールされていたようだ)。
$tar zxvf openssl-0.9.6.tar.gz $cd openssl-0.9.6 $./config --prefix=$HOME/local $make $make test $make install $tar zxvf openssh-2.3.0p1.tar.gz $cd openssh-2.3.0p1 $./configure --prefix=$HOME/local --with-ssl-dir=$HOME/local $make $make install
インストールは成功。 さっそく sshd を起動してみる。
$HOME/local/sbin/ssh -p 9999
起動も問題なし。外部からアクセスしてみると、接続できず。RSA認証もパスワード認証も駄目。 デバッグ出力を見てみると PAM を使う権限がないようだ。 ちなみに --without-pam をつけて configure してコンパイルしてみたところ、crypt まわりのシンボルがリンクできなくてビルドできず。
ちなみに手元の Debian GNU/Linux unstable で、openssh をビルドしたものは、上記実験はなんなく成功(接続は localhost から、openssl は Debian パッケージを使用、openssh は tar ball からビルド)。 また、Plamo 2.0 の方に実験してもらったら tty のオープンの権限がなくてはねられるらしい。ssh -p 9999 ls 等の command の実行は OK らしい。
ということで、環境によって権限関係でいろいろ結果が変わってくるようだ。 FreeBSD でなんとかうまく動かないかな。
Web カメラ*1の画像ファイルとか、ノート PC から cron で定期的にサーバへ送信している。しかしPUSHじゃなくてPULLも活用したい。
それから Web サーバはホスティングサーバなのであまりヘビーな事はできないし、ツールのビルドに必要なライブラリとかを一般ユーザで用意するのもいろいろ面倒ということで、一部の処理は手元のホストでやらせてもいいかなと。
だいたいいつもIPマスカレード下にいるので、トンネルを用意しないと。 SSHがやはりお手軽かな。 例えば、
ssh -R XXXX:127.0.0.1:80 www.naney.org
しておけば www.naney.org 上からそのホストに
wget http://localhost:XXXX/service.cgi?foo=1234
などとしてPULLできるようになる。 ...はずだがうまくいかないや。何故?
プライベートネットワーク同士ではうまくいったので「ルータがらみ?」かと思ったが、別の外部ホストに対して実験してみたところそっちではうまくいったので、そうでもない様子。
でいろいろチェックしてみたところ www.naney.org で
Feb 2 12:08:41 yyyy sshd[61628]: error: Hm, dispatch protocol error: type 80 plen 33
とエラー吐いてた。 もしやと思って ssh 実行時に -1 したら成功。 通常の SSH接続だと ssh -2 でもつながるし、LocalForward でもプロトコル2でつながっているんだけどなぁ。
そういえば ssh -4 は 'Use IPv4 only.' (OpenSSH_3.6.1p2)。 'Force protocol version 4' が必要な時代がきたらどうするのかな?
*1休止中
マニュアルを読んだら、SSHクライアントの設定のところでユーザ名だけでなくパスワードも指定する例が示されていた。
前略\TortoisePlink.exe -l ユーザ名 -pw パスワード
なるほど。動いた。しかしかなり嫌な感じ。
ということで、「PC日記: svn+ssh on Windows」で紹介されている方法にしてみた。
この状態で TortoiseSVN から接続できるようになった。
2005年8月4日に若干体裁を整理。
やはり Windows - Windows で Unison を使う事に未練がある。 リモートの Windows BOX で sshd をたてればなんとかなる?
Cygwin の中で必要なものだけを抜き出したパッケージ。 cwRsync と同じタイプ。
Windows XP Home Edition SP1 にインストーラでインストール後、説明どおり group と passwd を作成。 sshd をサービスとして開始する。 Internet Connection Firewall の設定を変更して22番ポートを開ける。
しかしなんか変なシェルで使いづらい。 またコマンドが実行に失敗してエラーモーダルダイアログが出る時は sshd が動いているPCの画面に表示される。SSHクライアント側からは知るよしもないし、ボタンを押すすべもない。
うーん。不便。
Windows 上で作成・更新したファイルをサクッと Linux 上に反映させるのに、やっぱり Unison File Synchronizer を使うことにした。Windows 上の Unison から SSH 経由で Linux 上と同期させる構成ってしたことなかったな。ちょっと調べつつ設定。
Unison-2.40.102.zip をダウンロードしてきて C:\Uers\Naney\local\Unison-2.40.102 として展開。テキスト版(CLI 版)を使いやすいように unison.exe という名前に変える。
SSH 経由の接続については PuTTY についている Plink を使うことにした。OpenSSH とはちょっと違うので下記のようにバッチファイル C:\Uers\Naney\local\Unison-2.40.102\plinkunison.bat を作る。
@c:\Users\Naney\local\PuTTY\plink.exe -l naney -ssh remote.example.com unison -server
同期先のホスト remote.example.com にアカウント naney で SSH 接続して unison をサーバとして起動するというバッチファイル。
次に Unison 同期設定を書いたプロファイルファイル c:\Users\Naney\.unison\test.prf を作る(テスト用)。内容は以下。
root = c:\Users\Naney\unisontest root = ssh://naney@remote.example.com/home/naney/unisontest sshcmd=c:\Users\Naney\local\Unison-2.40.102\plinkunison.bat times = true fastcheck = yes
双方の unisontest ディレクトリを同期する設定になってる。
最新の OCaml (Unison のビルドに必要)と Unison を取ってくる。
wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.40.102.tar.gz
あとは以前の インストール手順 と同じ流れでインストール。
Windows のコマンドプロンプトから
unison test
で同期できることを確認。
あとは実際の同期したいディレクトリのペアにあったプロファイルファイルを作っていけば OK。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。