稼働中のLinuxサーバにある日突然sshログインできなくなり、急遽強制再起動。
再起動後は正常にログインできたが、何故かbashプロンプトがおかしくなってしまった…。
普段は以下の様な感じ。
Mintos-MacBook:~ minto$ ssh nantoka-server
Last login: Wed Jun 29 11:42:20 2016 from xxx.xxx.xxx.xxx
[minto@nantoka-server ~]$
それがこうなった。(最後の行に注目)
Mintos-MacBook:~ minto$ ssh nantoka-server
Last login: Wed Jun 29 11:42:20 2016 from xxx.xxx.xxx.xxx
~]$ o@nantoka-server
実際は『o』の位置にカーソルが来ている。カーソルに被さる感じで『ログインユーザ名@ホスト名』の先頭4文字が抜けた状態のものが常に表示される。エンターキー押しても状況は変わらず。気持ち悪いし読みづらい…。
コマンドを入力しようとした際もガンガン崩れるし、rootを含め他のユーザに切り替えても状態は変わらず。なんなんだこれ…。
【前提】 bashプロンプトの表記は環境変数に定義されている
bashでは環境変数『PS1』によってプロンプトを定義している。
PS1を置き換えることによって、特殊文字を用いながらプロンプトをカスタマイズできる。
例えば以下の設定を行うと、シンプルに『$ 』だけのプロンプトに変更される。
$ export PS1="$ "
標準的なプロンプトでは、『ユーザ名』『ホスト名』『カレントディレクトリ』が表示されるくらいだが、『現在日時』『シェル名』『シェルバージョン』『コマンドの履歴番号』などを表示できるほか、色やbold・下線・点滅などの文字装飾もできる。
このようなコマンドを ~/.bashrc などに記述することで、ログインする度にカスタマイズしたプロンプトを適用できる。
原因はホスト名の設定値不具合
確認してみたところ、PS1は以下の様な感じ。従来の設定から書き換わっているわけではなかった。
~]$ echo $PS1
[\u@\h \W]\$
PS1をいじってみたところ、『\h』(ホスト名)を含めた時だけプロンプトが崩れることが判明。どうやらホスト名が異常な状態らしい。
ただ、現状のホスト名を確認したところ、特におかしなところは無い。これはどういうことなんだろう…。
~]$ hostname
nantoka-server
~]$ cat /etc/sysconfig/network | grep HOSTNAME
HOSTNAME=nantoka-server
とりあえず値は変わらないはずだけど、ホスト名を再設定してみた。
~]$ sudo hostname nantoka-server
再ログイン。
Mintos-MacBook:~ minto$ ssh nantoka-server
Last login: Wed Jun 29 11:43:40 2016 from xxx.xxx.xxx.xxx
[minto@nantoka-server ~]$
直ってる…。なんでこれで直るんだ…。仕組みが分からないんだけど、中間ファイル(中間設定値??)的な部分が壊れてたのか?
どうすることも出来なかったら、とりあえずPS1には『\h』(ホスト名)を除いた設定値にして過ごそうと思っていたんだけど、直ってしまったのでこれで解決。なんだったんだろ。