/etc/passwdでログインシェルの設定を誤った場合ssh -tでは復旧できない。

遠方にある物理サーバーのrootユーザーが逝った話 - タケハタのブログ

これ読んだぼく「ssh -tで /bin/bash/usr/sbin/sudo /usr/bin/vi /etc/passwd すればよかったのでは」

検証

Webarena Indigo使ってるのでIndigoに適当なインスタンス(CentOS 7.5)を用意して実験しました。タイトルにオチを書きましたがssh -tでは復旧できません。

ログインシェルが正常の場合

Raspbian Busterから/etc/passwdの書き換えを試みます。

-SSH- raspberrypiˇpi ~ » ssh -i "private_key.txt" -t -t centos@140.227.xxx.xxx "/usr/bin/sudo /usr/bin/vi /etc/passwd"

~~~ viの編集画面
centos:x:1000:1000::/home/centos:/bin/bash
~~~

Connection to 140.227.xxx.xxx closed.

書き換えできました。

ログインシェルが異常の場合

-SSH- raspberrypiˇpi ~ » ssh -i "private_key.txt" -t -t centos@140.227.xxx.xxx "/usr/bin/sudo /usr/bin/vi /etc/passwd"

centos@140.227.xxx.xxx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

だめでした。

[B! サーバ] 遠方にある物理サーバーのrootユーザーが逝った話 - タケハタのブログ

odz ログインシェル間違えただけなら ssh -t root@server /bin/bash とかで行けるのでわ。/行けなかった。opensshは直接コマンドを実行する場合もログインシェルのチェックはしてファイルない場合は認証エラーになる(ソースで確認

なるほど、じゃあだめだ。
できるんじゃないか?と思ったのですが、予想が外れていたので実際に確認してよかったです。これに限らず、実際にトラブルが起こってしまった時に「できると思ってたけどできませんでした」だと目も当てられないので、疑問に思ったら実行してみるのは大事ですね。