【AWS】EC2でchshのシェル変更できない問題解決【zsh】

今回は EC2 (Amazon Linux) で zsh をうまく設定できない人を対象に、シェルの変更方法を解説しています。設定ファイルを直接書き換えてもよいのですが chsh コマンドを導入すれば簡単に変更できるようになります。

こんにちは。iQeda [@iQeeeda] です。

「EC2 でログインシェル変更できない?!」問題

はじめて AWS の EC2 で Amazon Linux という公式配布イメージ (AMI) を使ったとき、

ログインシェルを bash から zsh に変更したいんだけど chsh が使えない!?

...とビックリしたことがあります。

そのようなとき、すぐ chsh コマンドを扱えるようにする方法があります。
それは util-linux-user をインストールことです。

util-liunx-user をインストールするだけ!

util-linux-user をインストールしたら chsh コマンドが使えるようになります。

# util-linux-user をインストール
sudo yum install util-linux-user -y

zsh をインストールして、ログインシェルとして設定してみましょう。

# zsh をインストール
sudo yum install zsh -y

# zsh に変更する
chsh -s /usr/bin/zsh

ec2-user のシェルを変更します。
パスワード: [パスワード]

# もし ec2-user に権限がなかったり、パスワード設定していなかったら root ユーザに切り替える
sudo su -
passwd

# root ユーザのパスワード設定
New password: [パスワード設定]
Retype new password: [もう一度入力]

# root ユーザで ec2-user のログインシェルを切り替える
chsh ec2-user

Changing shell for ec2-user.
New shell [/bin/bash]: /usr/bin/zsh
Shell changed.

# root ユーザで ec2-user のパスワードを設定する
passwd ec2-user
ユーザー ec2-user のパスワードを変更。
新しいパスワード: [パスワード設定]
新しいパスワードを再入力してください: [もう一度入力]
passwd: すべての認証トークンが正しく更新できました。

util-linux-user ってなんなの?

Linux の基本的な便利コマンドが入ったパッケージのようです。
何も考えず、環境構築時に毎回パターンで入れておけば安心です。

util-linux-user に入っているコマンド

コマンド名

fdisk

getopt

hwclock

mount

umount

blockdev

elvtune

fdformat

fsck

isosize

mkfs

mkswap

raw

setfdprm

chfn

chsh

lst

login

mesg

newgrp

passwd

wall

agetty

fastboot

fasthalt

initctl

reboot

shutdown

simpleinit

vigr

vipw

cal

ddate

kill

logger

look

mcookie

namei

rename

reset

script

setterm

whereis

write

arch

flock

readprofile

ctrlaltdel

cytune

dmesg

ipcrm

ipcs

ramsize

rdev

renice

rootflags

sln

tunelp

vidmode

clear

col

colcrt

clrm

column

hexdump

more

od

pg

rev

tailf

ul

chsh を使わずにシェルを変更する方法 (非推奨)

それでもchsh が使えないとき、ログインシェル設定ファイルを直接編集する方法があります。

# zsh をインストール
sudo yum install zsh -y

# /usr/bin/zsh があるか確認
cat /etc/shell

sudo vi /etc/passwd

/etc/passwd を編集します。が、注意があります。

ここでシェルのパスを間違って指定した場合、
ssh でログインできなくなる可能性があるので「超慎重に編集」してください。
/etc/passwd
# /bin/bash から /usr/bin/zsh に変更する
# [username]:x :1634231:100 :[Your Name]:/home/[username]:/bin/bash
[username]:x :1634231:100 :[Your Name]:/home/[username]:/usr/bin/zsh

シェルの変更を反映する

サーバに再ログインしたタイミングでシェル変更されますが、
「シェルのパスを間違えていたらログイン (ssh) できない」リスクがあります。

絶対ログアウトはせず、その Terminal タブを閉じず、
サーバとのセッションを残しておいてください。

つまり Terminal で別タブ起動して ssh できるか試してください。

ssh して zsh に変更できていれば OK ですが、もしエラーでログインできなかった場合、
セッションが生きているタブから /etc/passed の確認をしてください。

関連記事

zsh ロードマップ

sudo [コマンド] が実行できないとき

No comments yet