Yuki猫のおうち

気ままに自由に日々を生きるエンジニアのブログ

お名前vps(kvm)上のCentOS7にシリアルコンソールでssh接続する方法

接続できない...

vpsサーバのネットワークが不調になった時とか、ssh接続できなくなった状況だといつも管理画面でブラウザ上からコンソールにアクセスしていた。
ただこのブラウザ上のコンソール、コピペができなかったりしてすごく使い勝手が悪い。
できればブラウザからじゃなくて、ターミナルから操作したい。
そこで、シリアルコンソール接続でターミナルからssh接続する方法があるらしいのでやってみた。

guide.onamae-server.com

なんだ意外と簡単に設定できるじゃん、と思ったら、

$ssh hogehoge
 Last login: Sat Jul 16 22:48:18 2016 from 106.161.167.199
 [Enter `^Ec?' for help]

ここで操作不能になった。ログインに遷移しない...
しかもC-cが効かなくてプロセスも落とせない...

設定が簡単とか、そんなうまい話はなかったのだ。

いざ、解決の旅へ

説明通りやっているのに、なぜログインできないのか。
調べてみると、どうもサーバ側でシリアルコンソール接続の設定をしないとダメらしい。

いろいろやってみた結果、このサイトの方法で解決できた。

www.nightmare-yk.com


まず、以下のコマンドで設定ファイルを編集して、新規作成する仮想端末ttyS1とserialの対応を行う。
編集したのは以下の4行。

$ vi /etc/default/grub
 ~
 GRUB_TERMINAL_OUTPUT="serial console"
 GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600 console=ttyS1,9600"
 ~
 GRUB_TERMINAL="console serial"
 GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"

そして反映。

$ /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg

次にgettyの設定を行う。
この辺りの処理は調べていくとsystemdがどうとかと書いてあったのだが、よくわからなかったので後で勉強することにして、まずは無心にコマンドを叩く。

雛形をコピって、ログインシェル振り分けるところにシンボリックリンク貼って、デーモンにサービス追加して、最後に自動起動設定してる。多分。

$cp /lib/systemd/system/serial-getty@.service  /etc/systemd/system/serial-getty@ttyS1.service 
$ ln -s /etc/systemd/system/serial-getty@ttyS1.service /etc/systemd/system/getty.target.wants/
$ systemctl daemon-reload
$ systemctl start  serial-getty@ttyS1.service
$ systemctl enable serial-getty@ttyS1.service

ここまで出来たら、最後に以下のファイルを編集して、ttyS1の存在を教えてあげる。
このsecurettyはrootでログインできる端末のリストらしい。

$ vi /etc/securetty
~
ttyS1
~

これで設定は完了。

$ shutdown -r now

サーバを一度再起動して、ログインを試みる。

$ ssh hogehoge
 Last login: Sun Jul 17 00:52:35 2016 from 106.161.167.199
 [Enter `^Ec?' for help]

 CentOS Linux 7 (Core)
 Kernel 3.10.0-327.22.2.el7.x86_64 on an x86_64

 yukineko login:

できた!!

こんな面倒な設定するだなんて、公式のどこにも書いてなかったよ...

新たなる問題

今度はシリアルコンソール接続を終了できなくなってしまった...誰か助けて...