sshで”Too many authentication failures for ユーザー名”と怒られるときのひとつの対処法

自分の Mac の Virtual Box に入れた CentOS にはじめてターミナルから入ろうとするとこんなふう↓に怒られた。もちろんまだ公開鍵等の設定はしていないのでパスワード認証で入りたいわけである。

$ ssh hoge@192.168.56.10
Received disconnect from 192.168.56.10: 2: Too many authentication failures for hoge

↑と出て、入れなくて困っていた。クライアント、ホスト、両方の log を見てもよく分からぬ。困ったものだ。が、↓のようにすると、
$ ssh -2 -o PreferredAuthentications=password hoge@192.168.56.10
hoge@192.168.56.10's password:

あっさり入ることが出来た。もしかして、sshd_config で、公開鍵認証 OK かつ パスワード認証 OK となっている場合、クライアントからアクセスするとおかしくなるのではと思って、ホスト側の CentOS について、
cd /etc/ssh/sshd_config

↑として、
PubkeyAuthentication no
PasswordAuthentication yes
↑というふうに、2つの項目について明示的に書いてみた(言い換えると、コメントアウトでごまかさずに、きちんと書いた)。

すると、
ssh hoge@192.168.56.10

↑であっさり入ることが出来た。まったくもう…きちんとクライアントのエラーメッセージかホストのログに書いてほしいものである。

Mac の VirtualBox に CentOS 6.3 minimal をインストールしてターミナルから ssh で操作できるようにする

自分でクラウドインスタンスや物理的なサーバーを持っていると、ネットワークを経由するプログラムを開発・検証するのに楽ですが、自分のラップトップの内部で Linux システムを一個持っていると、インターネットに繋がっていない状態であっても快適に開発することが出来るので有効です。

Mac で仮想OSソフトを考えると、VMWare Fusion がありますが 5000円ぐらいするようです。私の用途ですと ssh で接続できれば OK でリッチな環境などいらないので、無償のものがあれば嬉しいですが、Oracle VirtualBox は無料のようです。さっそく使ってみて、ssh で接続まで出来ましたので、備忘録的に設定方法を書いておきます。

– まずは、VirtualBox を落としてきます → https://www.virtualbox.org/wiki/Downloads

– 次に、CentOS6.3 minimal を落としてきます(minimal にするかどうかはその人次第ですが個人的には iso がわずか 300MB 以下で、インストールも素早く終わるので好きです。GUIは付属していませんが…) → http://isoredirect.centos.org/centos/6/isos/i386/

– VirtualBox の dmg ファイルを開いて、インストーラを実行します。

– VirtualBox のインストールが終わったら、アプリケーションフォルダにある VirtualBox のアイコンをダブルクリックして、VirtualBox を実行します。

– VirtualBox を実行したら、「Command + ,」か、メニューバー → 「環境設定」、で「環境設定」を開きます。GUI で見えている「設定」ではないので要注意!ここは間違えやすいです!詳細↓


– 「環境設定」の「ネットワーク」のところで、「+」ボタンをクリックします(↓の画像で○で囲ったところ)


– vboxnet0 にフォーカスを合わせて、↓の画像の、ドライバーみたいなボタンを押します。


– ↓のようにデフォルトでIPアドレスが設定されていると思います。たぶん、192.168.xxx.1 (xxx は好きにして良い)という風に自分で変更もできると思いますがデフォルトのままが良いかと思います。また、ここでの「DHCP サーバー」→ 「サーバーを有効化」にはチェックを*入れない*、でおいてください。チェックを入れてしまって、DHCP サーバーを有効にしてしまうとたぶんうまく動きません。




– 次に、VirtualBox で「新規」をクリックします↓


– ウィザードを進めていき、「仮想マシンとOSタイプ」は CentOS6 32bit の場合は↓のように、Red Hat に合わせます(CentOS は Red Hat Enterprise Linux のクローン、らしい)。


– 「メモリ割り当て」は 512MB(お好みで。とりあえず 512MB で足りるかと)、次の、仮想ハードディスクは「起動ディスク」にチェックを入れて、「新規ハードディスクの作成」を選択、次の「Welcome to the virtual disk creation wizard」では、「VDI(VirtualBox Disk Image)」を選択、次に「Dynamically Allocated」を選択して進めていくと、新しい Virtual Machine が出来上がります↓。また、「ネットワーク」の項目では、「アダプタ 1: Intel PRO/1000 MT Desktop (NAT)」とだけ表示されていることが分かります。


– 次に、この centos_32bit_minimal を選択した状態で、「設定」をクリックします↓。


– 先の「設定」をクリックして出てきたウィンドウで、「ネットワーク」→「アダプタ2」→「ネットワークアダプタを有効化」にチェックを入れます。「割り当て」を「ホストオンリーアダプタ」に合わせて、「名前」は先程作った vboxnet0 を選択します(↓の画像だと vboxnet1 となっていますが気にしないでください)。「高度」をクリックするとさらに項目が出てきます。「アダプタタイプ」「Promiscuous Mode」「MAC アドレス」はデフォルトのままでOKです。「MACアドレス」に書いている文字列は後で使うので紙に書き写すなどしておきましょう。そして、「OK」を押します。


– 上記で追加したネットワークがきちんと反映されているか確認してください。↓の画像のように、NAT と ホストオンリーアダプタが2つあればOK(ちなみにこの画像だと、vboxnet1 となっていますが、初めてやってみている方は vboxnet0 になっているはずです)。


– 次に、「起動」をクリックします。「Welcome to the First Run Wizard!」と表示されます、「Continue」をクリック、「Select Installation Media」では、↓の画像を参照して欲しいのですが、フォルダみたいなアイコンをクリックします。


– すると、ファイルブラウザが開きますので、先ほどダウンロードしてきた、「CentOS-6.3-i386-minimal.iso」を選択して、続けます。(または、仮想マシンが立ち上がった状態で、メニューバーの 「Devices」 → 「CD/DVD Devices」 → 「Choose a virtual CD/DVD file…」で iso を選択してから、「Machine」→「Reset」で可能かと思います)

– VirtualBox 内での CentOS6 のインストール画面が出てくると思います。CentOS のインストール方法に関しては、省略させて頂きます。グーグルなどで検索してみてください。

– CentOS のインストールが終わったら、login:と表示されるので、root と打って、CentOS のインストール中に設定したパスワードを打ちましょう。次に、yum update などと打ってもこの時点ではネットワークに繋がっていないのであまり意味がありません。以下、ネットワークの設定に入ります。

– まず、↓

cd /etc/sysconfig/network-scripts/
↑とします。次に、
vi ifcfg-eth0
として、編集します。viの使い方は検索してみてください(nano などの、もっと簡易なエディタがあるんですが、CentOS6.3 minimal だと最初からは入っておらず、yum install nano としないと使えないのですが、残念ながらネットワークに繋がっていないのでこれも出来ません。vi を使わざるを得ないかと)。そして、ONBOOT=”no” → ONBOOT=”yes” に書き換えます。あとは変更しなくていいと思います。こんな感じ↓になります。HWADDR や UUID は、人によって様々かと思います。
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="08:00:27:09:F1:40"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="50f6e026-5dc6-4bb0-9d2c-cff7473eb34b"
—–追記@2012-10-06—–
↑のeth0の設定ですが、dhcpにしない方が良いかも知れません。というのもネットワークが変更した際に、/etc/resolv.conf はdhcp機能により自動生成される場合があり、他のネットワークに移動した時に更新されずつながらない(名前解決が出来ないという意味です。IPアドレスを指定すれば行けます)場合があるからです。
[root@centos6-32bit etc]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="dhcp"
HWADDR="08:00:27:09:F1:40"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=10.0.2.15
NETMASK=255.255.255.0
TYPE="Ethernet"
UUID="50f6e026-5dc6-4bb0-9d2c-cff7473eb34b"
↑こんな感じにするといいと思います。
—–追記ここまで—–

—–追記ここから—–
@ 2012年12月9日

完全版がこちら↓
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR="192.168.0.150"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
IPV6INIT="no"
TYPE="Ethernet"
DNS1=192.168.0.1
DNS2=129.250.35.250
UUID="a42a7a27-19a4-45a8-ae5b-8c98dd9afe5c"

DNSを書いておかないと、/etc/resolv.conf が書き換わり、存在しないよ!とか言われてどこにもアクセスできなくなったりする。。。
—–追記ここまで—–

さて次に、↓
[root@localhost network-scripts] vi ifcfg-eth1
↑として、BOOTPROTO=”dhcp” → “static”、ONBOOT=”no” → “yes”、と書き換えます。また、HWADDRが、先ほど確認しておいたMACアドレスと一致しているか確かめましょう。一致していなければ一致するよう書き換えが必要です。次に、先ほど作った、vboxnet0 のIPアドレス、「192.168.56.1」を参考にして(ここは、先の設定によりけりです。vboxnet0 の IPアドレスが、192.168.xxx.1 (xxx は1 ~ 255の数字)、であれば、それに合わせてください)、「IPADDR=192.168.56.10」と追加します。これがこの CentOS の IPアドレスになります。192.168.56.10、となっていますが、2~254なら何でもOKです、つまり、192.168.56.254 や 192.168.56.2 などにしてもいいでしょう。ただ、この 192.168.56 までは変更してはいけません。変更できるのは、192.168.56.xxx の xxx の部分だけです。一例はこんな感じになります↓。HWADDRと、IPADDRは各自それぞれの設定があると思います。UUIDは最初から割り当てられていればそのままで、書いていなければ↓にあるのをそのままコピペでもいいと思います(たぶん他と被らなければなんでも良い)。

一例:
DEVICE="eth1"
BOOTPROTO="static"
HWADDR="08:00:27:CB:A3:B7"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="50f6e026-5dc6-4bb0-9d2c-cff7473ebbbb"
IPADDR=192.168.56.10
NETMASK=255.255.255.0

次に、リゾルバ(ドメインからIPアドレスを教えてくれる)を設定します。これが出来ていないと、IPアドレスを指定すれば繋がるのにドメインを指定してもつながらない、という状態になります。
vi /etc/resolv.conf
↑として、

/etc/resolv.conf
# ↓ NTT AMERICA
nameserver 129.250.35.250

# ↓ Google Public DNS
nameserver 8.8.8.8
↑とでもしておきましょう。

次に、
service network restart

として、ネットワークを再起動します。ネットワーク設定が上手く行っているか確かめるために、↓
ping yahoo.co.jp

↑などとしてみましょう。↓のように、
4 bytes from f11.top.vip.tnz.yahoo.co.jp (203.216.243.240): icmp_seq=1 ttl=63 time=5.53 ms

↑帰ってくればOKです。帰って来なかったら、上記の設定が間違っているかと思います。BOOTPROTO=”dhcp” となっていたり(static、にしないとだめ)している可能性があります。また、Mac のターミナルを開いて、この CentOS 宛に ping を打ってみましょう↓。
ping 192.168.56.10
PING 192.168.56.10 (192.168.56.10): 56 data bytes
64 bytes from 192.168.56.10: icmp_seq=0 ttl=64 time=0.753 ms

↑のようにきちんと帰ってきていたらOKです。ホスト(Mac)から VirtualBox の CentOS にアクセスできている証拠です。お疲れ様でした、こうなれば既に ssh 可能です。mac のターミナルで↓とコマンドを打つと、
ssh root@192.168.56.10

入れます。デフォだとパスワード認証になっていると思います。この辺の ssh の設定はいろいろとありますので調べてみてください。とりあえず公開鍵認証にしたいところですね。ちなみに、CentOS 以外だと、上記のコマンドでは入れない可能性はあり、/etc/ssh/sshd_conf の設定が必要かもしれません。

おまけとして、先の CentOS で ifconfig したときの結果を載せておきます↓。上手く行かなかったときの参考になるかもしれません。
ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:09:F1:40  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe09:f140/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23779 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13085 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19127821 (18.2 MiB)  TX bytes:715786 (699.0 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:CB:A3:B7  
          inet addr:192.168.56.10  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fecb:a3b7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:931 errors:0 dropped:0 overruns:0 frame:0
          TX packets:493 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:93490 (91.2 KiB)  TX bytes:90748 (88.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

– さらにおまけ。httpd(apache)を使いたければ、↓とコマンドを打って、
vi /etc/sysconfig/iptables

“-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT”を書き加える(↓を参照)。他はそのままでOK。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

次に、iptables を再起動して、httpd をインストールして起動↓
service iptables restart
yum -y install httpd
/etc/init.d/httpd start
chkconfig httpd on

↑として、先ほどのIPアドレスをブラウザに打ち込むと(例:http://192.168.56.10/)、Apache 2 Test Page を見ることが出来きます。ついでに、↓
yum -y update
↑としてアップデートしておくと良いでしょう。

—–追記@2012-10-06—–
VirtualBox のせいなのか、時間がやたらと乱れます。早くなったり遅くなったり…。とりあえず、15min毎にntpdateという、時間合わせコマンドを実行することにしました。cronという、定期的な実行を司るデーモンを使います。

vi /etc/crontab
↑として、↓のようにしてみました。ntp.nict.jpはntpサーバーという時間を合わせてくれるサーバーです。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
HOME=/

*/15 * * * * root /usr/sbin/ntpdate ntp.nict.jp > /dev/null 2>&1

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

これでひとまずおさまった感があるので、よしとします。また、/etc/grub.confにて、divider=10 clocksource=acpi_pm という文字列を追加すると良いそうです(編集後rebootが必要)。
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-279.9.1.el6.i686)
	root (hd0,0)
	kernel /vmlinuz-2.6.32-279.9.1.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet divider=10 clocksource=acpi_pm
	initrd /initramfs-2.6.32-279.9.1.el6.i686.img

# title CentOSの、 kernelの行のquietのあと、またはinitrdの前の行の最後に、divider=10 clocksource=acpi_pm という文字列を追加した。
—–追記ここまで—–


—–追記ここから—–
@2012年10月23日

諸悪の根源(?)、selinuxを無効にしましょう。WebでのPHPが動かなかったりします。パーミションもあっているしphp.iniもあっているしhttp.confもきちんと編集したのになぜなの状態の原因はたいていこれだったり…。

vi /etc/sysconfig/selinux
として開いて、SELINUXの項目について、enforcing->disabledと書き換えます。↓
~中略~
# SELINUX=enforcing
# ↓のように書き換える
SELINUX=disabled
~中略~

次にrebootします↓。
reboot
—–追記ここまで—–

CPUを入れ替えたら、Windows7の起動画面中に再起動を繰り返す件の解決

P8B75-M, Win7 の環境で CPU を G530 -> i5-3570K に入れ変えた所、表題のような状態に陥ってしまいたいへん困った。

Windowsが起動できなくなった、「Startup Repair Offline」のメッセージが出て起動
http://pc-seven.jp/faq/index.cgi?no=190&continue=on


結論としては↑で、SATA Mode が IDE になっていたからであった。G530 のときは当然、ACHI で設定したのである(そちらの方が高速だから)。CPU入れ替えに伴い、BIOS が初期化したのが原因だったのだろう。ACHI に設定したら無事起動した。

WordPress で 全記事一覧 + 日付 を表示する

—–追記@2012年9月16日—–
ページング機能も入れたいところ…。
まあでも個人のブログならポストはほとんど1000件以内におさまるだろうから問題が発生するまでほっておくとする…。
——–追記ここまで———

本ブログで全記事一覧を表示したかった。いろいろと調べてみて、出来たのでここに書いておく。↑の「すべての記事」が今回の記事そのもの。長い題名のものだと、折り返しになってしまって少々醜いがそこはご愛嬌…(スタイルシートで分けるのは ToDo ということで → 追記@2012-08-26、入れ子リストにして、日付にめり込む折り返しは回避した)。

【WordPress】全記事リストを投稿日と一緒に出力する
http://www.ep-melody.com/2011/11/wp-allentry_output/


↑を参考にさせていただきました(というかほぼ丸パクリですみません…)。

以下、手順。

まず、全記事一覧表示用の php ファイルを作る。↓のようなファイルをとりあえず作る。
zenbu.php

<?php
/*
Template Name: zenbu
*/
?>
<?php get_header();?>

<div class="entry-content">

<h2>すべての記事:</h2>    

<br>

<ul>
<?php query_posts('posts_per_page=-1'); ?>
<?php if (have_posts()):while(have_posts()):the_post(); ?>

<li><font size="4"><?php the_time('Y/m/d'); ?>: </font>

<ul>
<br>
<font size="4"><a href="<?php the_permalink(); ?>"><?php the_title_attribute(); ?></a></font>
</ul>

</li>

<br><br><br>
<?php endwhile; endif; ?>
</ul>

</div>

</div>
</div>
<?php get_footer();?>

ちなみに、get_sidebar(); などは敢えて書き込まず、sidebar を表示させないようにしている。これは個人的な趣味であり、好き好きの問題なので追加したい人は get_sidebar(); を加えれば良い。

次に、この zenbu.php を、自分が使っているテーマフォルダの下に置く。私の例だと、mantraというテーマを使っているので、
/var/www/html/blog/wp-content/themes/mantra
に置く。Windows を使っている人は FTP クライアントなどを用いることになると思う。

次に、WordPress のダッシュボードで、

「固定ページ」 → 「新規追加」 → タイトルに「記事一覧」と打つ → 右の方の「ページ属性」の「親」を「親なし」にして「テンプレート」をクリックして出てくるリストの一番下の、「zenbu」を選択 → 「公開」ボタンを押す → 上の方の、「固定ページを表示」をクリックして確認してみる(ちなみに、「ページ属性」の順序は、デフォルトでは 0 と表示されているが、これで他の固定ページとの順番を決めることが出来る。この全記事一覧を home のとなりにしたいのなら、これを 0 として、他の固定ページの「ページ属性」の順序を、1,2,3…としていけば良い。

なお、WordPress のテーマで、頻繁に更新のあるものもある。更新すると、上記のようにして作った全記事一覧は見られなくなる。また一から作り直しする必要があるので更新には注意が必要だ。テーマを更新する際には、一旦作成したphpファイルを別のところにおいてからやるべきだろう。

…ああ、こうしてまたどんどん WordPress に依存してしまっている。ますます抜け出せなくなってしまう。これで良いのだろうか?もちろんたいへんすばらしい CMS ではある。使いやすい UI、豊富なテーマ、数限りなくあるプラグイン、検索すればすぐに該当項目が出てくるトラブル耐性、うーん、盤石である。だけれども何だかくやしかったり。

WordPress に関する体系的かつ詳しい本はこちら↓。個人的にも持っています。アマゾンの評価も高いですね、25レビューで☆4つ半とは。


—–追記@2012年8月30日—–
同じ日に複数投稿した場合、↑のものだと、いちいち分けて表示される。if文で分離しても良いかも(めんどうなので ToDo にしておく^^)。