またかよ…

以前と同じ問題でドツボにハマる.かなりゲンナリした.ってか,こんな根本的なバグ、いい加減にcygwin1.dll側かinetutils側で対処してくれないと話にならんと思うのだが…もしかしてdevelopperが気づいていないのか?

手元には問題無く動いてるマシンが大量にあるので,以前はやらなかったdirtyな解決方法として,「別マシンから環境をゴッソリとコピーする」をやった.…そしたら今度はsshdが動作しなくなったりしてハマった.

結論としては,Cygwinsshdをsetup.exeからのアップグレード以外のdirtyな方法でインストールする場合,事前に完全消去するのが安全なようだ.以下,sshの消去手順の備忘録.

  1. sshdを止める: net stop sshd
  2. sshdをサービスから消去する: cygrunsrv -R sshd
  3. 隠れユーザ"sshd"を見えるようにする: passwd -u sshd
  4. WindowsGUIで通常通りにユーザ"sshd"を消す
  5. passwd,groupを作り直す: mkpasswd -l > /etc/passwd; mkgroup -l > /etc/group

ここまでやれば,後は適当に消去してOK.インストールする際は、

/usr/bin/ssh-host-config

を実行すれば,スクリプトが対話的に設定してくれる.ここで別の場所にもssh系コマンドが入っていると(例えば /usr/local/bin/ssh-keygen とか)面倒なことになる.なぜスクリプト内のコマンドがフルパスで書かれていないのかが疑問だ.まぁ普通はOpenSSH以外のことなんて考えていないのだろう.

sshdにSYSTEM権限を与えた場合,/var/emptyと/var/logのパーミッションはSYSTEMがownerである必要がある.その設定方法は,環境変数CYGWINにnteaとかntsecとか設定されてるとややこしい.とりあえずCYGWIN=""の状態にしてから,chownで変更するのが一番手っ取り早い.