仮想環境上のzshのバージョンを上げるために、ソースコードからインストールし、再度SSHでログインしようとしたときに以下のエラーが発生した。
$ vagrant ssh
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
運良く他のログインセッションが生きていたため、ゲストOS側で/var/log/secureを確認したところ、以下のエラーで落ちていることが判明。
Dec 13 09:53:38 vagrant-centos64 sshd[25506]:
User vagrant not allowed because shell /bin/zsh does not exist
yumでインストールしたzsh(/bin/zsh)をアンインストールしたので、ログインシェルである/bin/zshが消え去り、ソースからインストールしたzsh(/usr/local/bin/zsh)がユーザのログインシェルに反映されていないことが原因。
かといって、chshでログインシェルを変えようとすると以下のエラーで落ちる。
$ chsh
chsh: Your shell is not in /etc/shells, shell change denied
おそらく、zshのアンインストール時に/etc/shells内の/bin/zshの記述が抜け落ちてしまっているのが原因。
ということで、/etc/shellsに以下のように/bin/zshと/usr/local/bin/shの記述を追加すればOK。
$ sudo vim /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/usr/bin/tmux
/bin/zsh
/usr/local/bin/zsh
あとはchshしてログインシェルを/usr/local/bin/zshに変更すればSSHで外部からのSSHが通ります。何にせよ、ログインシェルのプログラムをあれこれする場合は2つ以上セッション貼るかバックアップ取るかした方が安全です。他のログインセッションが生きていなければ詰んでいた…。