MacOSXで、Homebrewから入れたopensshを使う
MacOSXには、標準でsshが入ってるし、別にそれを使ってても何も支障はないんだけど、なんとなくhomebrewでいれた最新版を使いたいなーなんて思ったのが運の尽きで、ちょっと問題が起きたのでそれをメモ。ついでに、一緒に入ってくるsshdでサーバーを建てる方法もゴニョゴニョ。
OpenSSHを入れる
Homebrewでopensshを入れるのは簡単で、次のようにコマンドを打てばいい
$ brew tap homebrew/dupes #過去に一度やっているようなら不要 $ brew install openssh
確認
$ ssh -v #OpenSSH_6.2 $ /usr/bin/ssh -v #OpenSSH_5.9 $ /usr/local/bin/ssh -v #OpenSSH_6.2
問題
この状態で、別のMacのsshdに接続すると、lsで日本語が化ける。全部??????になる。こっちが????だコンチクショー!
んで、その解決方法は、まぁ"diff /etc/ssh_config /usr/local/etc/ssh/ssh_config" をすれば分かるんだけど、homebrew版ssh_configを下記のように修正すればいい。
- #Host * + Host * + SendEnv LANG LC_*
Homebrew版sshdを使う
ところが、こんな簡単な問題だとは気づかず、「あ、Mac標準のsshdとHomebrewなsshの相性が悪いに違いない!どちらもHomebrew版にすれば、解決するに違いない!」と思った俺は、そそくさとサーバー側にもHomebrew版のopensshを入れ、ゴニョゴニョし始めるわけである。
確認
$ sshd -v #OpenSSH_6.2 $ /usr/sbin/sshd -v #OpenSSH_5.9 $ /usr/local/sbin/sshd -v #OpenSSH_6.2 $ telnet localhost 22 #SSH-2.0-OpenSSH_5.9
既存のsshdを切る
とりあえず、今動いてるsshdを切る。今まで、Mac標準のsshdを使っていたので、機能のOFFは「システム環境設定」の「共有」を開き、リモートログインのチェックボックスをOFFにした。コマンド派な人は下記のコマンドを打つだけでもいいはず。(システム環境設定の共有とlaunchctlがリンクしてるかどうかは、まだ良くわかってない)
$ sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist
設定を書き換える
上記のコマンドで参照してるファイル「/System/Library/LaunchDaemons/ssh.plist」がデーモン起動用の設定ファイルになるので、これを書き換える。
基本的に、
起動
下記コマンドを打って、デーモンとして立ち上げる。
$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
確認
下記コマンドを打って、OpenSSHが6.2になっていれば勝ち
$ telnet localhost 22 #SSH-2.0-OpenSSH_6.2
注意
sshdをHomebrew版にしたら、ちゃんと設定を見直そう。というのも、標準のsshdなら /etc/sshd_config を参照するのだが、Homebrew版は /usr/local/etc/ssh/sshd_config が参照する。 Homebrew版の方に旧設定ファイルを上書きするもよし(?)、diffとってチマチマ直すもよし、とりあえずこの設定を見なおさないと、passwordAuthentication が yes になってたりする(コメントアウトされてるが、おそらく無記述によるデフォルト値がyes)ので注意が必要。
余談
ssh.plistを書き換えた時、