2016-12-19

ログインシェル変更時にSSHでPermission deniedと言われたときの対処法

仮想環境上の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つ以上セッション貼るかバックアップ取るかした方が安全です。他のログインセッションが生きていなければ詰んでいた…。

このエントリーをはてなブックマークに追加