@kyanny's blog

My life. Opinions are my own.

ssh localhost したら ssh_exchange_identification: Connection closed by remote host エラーでログインできない場合に疑うべきこと

あるサーバで localhost に対して ssh したら ssh_exchange_identification: Connection closed by remote host エラーでログインできなかったので少し調べた。

/etc/hosts.allow, /etc/hosts.deny

まずこのファイルを疑う。 ssh_exchange_identification: Connection closed by remote host 追記: リンク切れてたので web.archive.org のキャッシュを参照のことssh_exchange_identification: Connection closed by remote host (2009/07/21)
設定の仕方は http://www.turbolinux.co.jp/products/server/11s/user_guide/tcpwrapperconf.html を参照。

TCPWrappers とか inetd とかにまつわるこんな話も http://fg-180.katamayu.net/archives/2005/11/05/104105 要するに sshd は /etc/hosts.allow と /etc/hosts.deny を参照する、ということだけ知っていればこのケースでは問題ない。

tcpserver, tcprules(レアケース?)

/etc/hosts.allow, /etc/hosts.deny を適切に設定しても依然として ssh localhost が失敗することがある(俺が今回そうだった)。上にあげた http://fg-180.katamayu.net/archives/2005/11/05/104105 によると inetd のもとで動かしていない場合でも sshd デーモンは /etc/hosts.allow ファイルを参照する。にもかかわらず反映されないということは違うルールのもので起動されているはず、ということで(略)、要するに今回のサーバでは tcpserver で起動していた。

で、 /service/sshd ディレクトリをのぞいてみると allow とかいうファイルが置いてあり、 run スクリプトのなかで tcprules というプログラムを使っている。 The tcprules program を読んで、接続を許可する IP アドレス(今回は 127.0.0.1)を allow ファイルに追加して sshd を再起動。 svc -t /service/sshd で、 ssh localhost が無事成功した。

ちなみに

なんで localhost に ssh したかったのかというと、 http://hadoop.apache.org/core/docs/current/quickstart.html#PseudoDistributed にそう書いてあったから。

実用SSH 第2版―セキュアシェル徹底活用ガイド

実用SSH 第2版―セキュアシェル徹底活用ガイド

  • 作者: Daniel J. Barrett,Richard E. Silverman,Robert G. Byrnes,小島肇,坂井順行,鹿田幸治,園田道夫,高橋基信,根津研介,宮本久仁男
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2006/11/22
  • メディア: 大型本
  • 購入: 2人 クリック: 79回
  • この商品を含むブログ (48件) を見る