Haiku OS に SSH で繋がらない ― 「Permission denied」 の正体

みなさん、こんにちは。

当サイトでは、これまで Haiku にリモート接続して AI でプログラムを開発したり、ビルドのデバッグをしたりする記事を書いてきましたが、実はリモート接続自体には古の telnet を使っていました。

なぜなら、Haiku への SSH 接続 で思いっきりハマっていたからです……!

パスワードは間違っていないはずなのに、何度やっても Permission denied で弾かれるという沼から抜け出せずにいました。調査が面倒で放置していたのですが、私は過去のHaikuのバージョンでssh接続できていた記憶があるので、必ず接続できるという確信だけはありました。

今回、重い腰を上げて調査を始めてみると、原因はとても単純で、Haiku の設計思想と OpenSSH の最近のデフォルト仕様がかみ合っていなかっただけでした。そしてこれ、BeOS を知っている Haiku コミュニティにとっては常識とされていることだったんですよね。

ただ、そんな常識は Haiku 以外ではなかなか通じないですし、地味に分かりにくいポイントなので、同じところでハマっている方向けに記録を残しておきます。


パスワードが合っているのに弾かれる

Haiku 機へは telnet であれば問題なく繋がっていました。ユーザー名 user、パスワードも正しく入力できてログインできます。ところが、同じユーザー名とパスワードで SSH を試すと……

$ ssh user@192.168.0.xx
user@192.168.0.xx's password:
Permission denied, please try again.
user@192.168.0.xx's password:

このように毎回拒否されてしまいます。タイプミスを疑って何度も慎重に入力し直しましたが、状況は変わらず。さらに厄介だったのは、途中で以下のような警告まで出てきたことです。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

これは「中間者攻撃の可能性」を示す警告なので、安易に無視して突破してはいけない類のものですね。


まず「本当に相手は Haiku 機か」を確認する

ホスト鍵の警告が出た場合、真っ先にやるべきなのは known_hosts の安易な削除ではなく、相手が本当に意図した機体かどうかの確認 です。今回は telnet 経由でログインできる別経路があったので、そちらから直接ホスト鍵のフィンガープリントを取得して突き合わせてみました。

$ ssh-keygen -lf /boot/system/settings/ssh/ssh_host_ed25519_key.pub
256 SHA256:t8/Qg1u5xtsItIcHMZ+X3D6TCx7994MLPN5bg****** user@shredder (ED25519)

SSH クライアントが警告の中で表示していたフィンガープリントと完全に一致しました!

/boot/system/settings/ssh/ 以下のホスト鍵ファイルの更新日時を確認すると、少し前に Haiku を再インストール(あるいは設定リセット)したタイミングで鍵が再生成されていたことも分かりました。なりすましではないことが確認できたので、ここでようやく known_hosts の古いエントリを削除して次に進みます。

$ ssh-keygen -f "~/.ssh/known_hosts" -R "192.168.0.xx"

ここまでやって、ようやく本題の「パスワードが通らない問題」の調査に入れます。


本当の原因 – Haiku の user は uid=0 だった

ホスト鍵を更新してもなお Permission denied が続きます。sshd 自体は起動していて、鍵交換(KEX)までは正常に進んでいるので、ネットワークやポートの問題ではありません。sshd_config を確認しても、PasswordAuthentication を含めてほぼすべてデフォルト(コメントアウト)のままで、一見何もおかしくなさそうです。

ここで試しに、Haiku 側で id コマンドを打ってみました。

$ id
uid=0(user) gid=0(root) groups=0(root),101(party)

なんと、user という名前のアカウントが、実体としては uid=0(root)だったのです!

これは BeOS を継承した Haiku の設計によるもので、元々シングルユーザー OS として作られているため、デフォルトの操作用アカウントがそのまま root 権限を持っています。

一方、近年の OpenSSH はセキュリティ強化のため PermitRootLogin のデフォルト値が prohibit-password になっています。これは「root は公開鍵認証でのみログイン可、パスワード認証は不可」という設定です。sshd_config 上では、

#PermitRootLogin prohibit-password

とコメントアウトされていますが、これは「デフォルト値を明示しているだけ」であって、機能が有効化されている(=パスワードログインが禁止されている)状態を意味します。

つまり、user(=root)でパスワードログインを試みると、パスワードの正誤に関係なく機械的に拒否されてしまうわけですね。これが Permission denied の正体でした。


対応手順 – 2つの設定が必要

Haiku の 公式ガイド(Network services) にも書かれている通り、SSH のパスワードログインを有効にするには次の 2 つの対応が必要になります。

1. passwd でパスワードを設定する

Haiku はデフォルト状態では user にパスワードが設定されていません。telnet でログインできていたのは、手動で passwd を実行して設定済みだったからです。Haiku にリモート接続する際は、まずパスワードを設定しておきましょう。

$ passwd

2. sshd_config で PermitRootLogin yes に変更して sshd を再起動する

設定ファイルを書き換えて root ログインを許可します。

$ sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /boot/system/settings/ssh/sshd_config

同じフォルダにssh_configがあり、名前が似ていて間違いやすいので注意してください。

ssh_configを書き換える
ssh_configを書き換えたところ

変更後、設定を反映させるには sshd の再起動が必要です。Haiku の場合は、ネットワーク設定画面で SSH サーバーを一度無効にしてから、再度有効にし直せば OK です。

SSHサーバーを無効にしてから再有効化
SSHサーバーを無効にしてから再有効化

これで、無事に SSH 経由でのパスワードログインが通るようになります!

$ ssh user@192.168.0.xx "uname -a"
user@192.168.0.xx's password:
Haiku shredder R1~beta6+development hrev60072+221 Oct 14 2026 12:33 x86_64 x86_64 Haiku

有名なハマりポイントの割には……

今回の症状は英語圏の Haiku コミュニティでも珍しくないようで、公式フォーラムの “Password rejected” スレッド や、開発バグトラッカー でも「OpenSSH のデフォルト仕様が root のパスワードログインをブロックしてしまう」という件が議論されていました。

公式ガイドやフォーラムなどの一次情報に当たれば解決策はすぐ分かるのですが、これだけ多くの人が通る初見殺しのトラップがそのままになっているのは、正直なところ少し勿体なく感じます。ユーザーが root 権限を持つのはシングルユーザー OS という設計上仕方ない部分ですが、初期導入の手順がもう少し簡略化されると嬉しいですね。


Haiku OS に SSH で繋がらないと困ったら

今回のポイントを一覧表にまとめました。

症状原因対応策
ホスト鍵変更の警告が出るHaiku 機の再インストール等でホスト鍵が再生成されたtelnet など別経路で実際のフィンガープリントを確認し、一致を確かめてから known_hosts を更新する
パスワードが合っているのに Permission deniedHaiku の user は uid=0(root)。OpenSSH のデフォルト PermitRootLogin prohibit-password に引っかかっているsshd_config の PermitRootLogin を yes に変更し、sshd を再起動する
そもそもパスワードが通らないHaiku はデフォルトでパスワードが未設定passwd コマンドでパスワードを設定する

ホスト鍵の警告が出たときは「怖いからとりあえず消す」のではなく、別経路があるなら必ず真正性を確認してから対処するのが鉄則です。そして Haiku で SSH が通らないときは、まず id を打って「自分が本当は何者(root)なのか」を意識してみるのが解決の近道になりそうです。

SSH 接続はリモート開発の基本中の基本だけに、ここでつまずいてしまうと触る意欲が削がれがちですよね。Haiku 開発チームによる改善に期待したいところです。

本日も最後までお読みいただきありがとうございました。

それでは、よい Haiku OS ライフを!

カテゴリ: その他

コメントする

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

上部へスクロール