Ubuntu Weekly Recipe

第638回 Ubuntuに「普通に」ログインするいろいろな方法

この記事を読むのに必要な時間:およそ 7 分

Ubuntuはマルチユーザーに対応したシステムです。つまりシステムを使用する際は,ログインシステムを介して使う人が「誰であるか」を識別し,⁠本人であること」を認証する必要があります。今回はUbuntuに「普通に」ログインするさまざまな方法を紹介します。

一般的なログイン方法

おそらくUbuntuを日常的に使っている人で,⁠Ubuntuにログインしたことがない人」はほぼ皆無でしょう※1⁠。それくらい当たり前に使っているログインシステムですが,その仕組みは想像以上に複雑です。

※1
恐るべきことに「Ubuntuをインストールしてみたけれども,設定したパスワードがわからなくなったため,初回起動でUbuntuの利用を諦めた」というケースを聞いたことがありますので,初心者を含めるとゼロではないようです。

歴史的経緯から,一般的にローカルユーザーの情報は/etc/passwdファイルに記載されてはいるものの,実際のログイン時にはその方法によって/etc/passwd以外にもさまざまな「ユーザーに関する情報データベース」にアクセスすることになります。さらにLDAPのようなリモートのアカウントサービスまで加えると,その全容を把握するには命がいくつあっても足りません※2⁠。

※2
全容を把握しようとすると,よくわからない過去の遺産・古いスタイルのコード・唐突に行われた仕様変更の跡・いきなり現れた「これまでの古いシステムを一掃し,置き換え可能であるスマートでモダンなやり方」と自称するソフトウェア・心ないマサカリなどによって,どんどんライフが削られていきます。

ただし出来合いのものをそのまま使うのであればそこまで難しくはありません。特にデスクトップ版のUbuntuであれば,PCを起動したあとに目の前に現れるであろうログイン画面にパスワードを入力するだけです。

図1 Ubuntu 20.04 LTSのログイン画面。Ubuntu 17.10からGDMへと戻り,その後も少しずつデザインが変わっている

画像

ログインに成功したらそのユーザーの「セッション」が開始します。ここから先の流れはユーザーのセッションタイプによって異なりますが,セッションスタートアップスクリプトにしたがってX Window SystemやWaylandが起動したり,デスクトップ環境が立ち上がったり,環境変数が設定されることで,ユーザー固有の環境がシステム上に構築されます。

Ubuntuサーバーであっても,大抵はsshコマンドを使ってログインします。こちらもサーバーマシンのアドレスを指定するだけですので,特に難しいことはないでしょう。

$ ssh ubuntu@nuc.local
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 updates can be installed immediately.
0 of these updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

SSHにおけるパスワード認証と公開鍵認証

sshログインする場合,パスワード認証も可能ではありますが,できるかぎりよりセキュアな公開鍵認証を使うようにしましょう。Ubuntuの場合,LaunchpadやGitHubに公開鍵を登録しておけばssh-import-idコマンドでかんたんにサーバーに公開鍵を登録できます。

(リモートマシン上)$ ssh-import-id lp:(LaunchpadのID)
2017-11-16 21:38:48,042 INFO Authorized key ['2048', 'SHA256:hthMPCKLGShIxYq57pxS/PXXJyRFGwmh4kdRtSDnr5c', 'shibata', '(RSA)']
2017-11-16 21:38:48,044 INFO Authorized key ['2048', 'SHA256:ZtuahRXGnK6gHb2/bwBoTM2bLERVpJs8dczzeY/qpdo', 'shibata@shibata-desktop', '(RSA)']
2017-11-16 21:38:48,047 INFO Authorized key ['2048', 'SHA256:C8EoTol3lbkWtXe8Q38GGRpPZQ6HBS/LDIZfghlzP9I', 'shibata@pomera', '(RSA)']
2017-11-16 21:38:48,048 INFO [3] SSH keys [Authorized]

引数は「lp:(LaunchpadのID⁠⁠」もしくは「gh:(GitHubのID⁠⁠」のいずれかまたは複数です。もしローカルマシンの公開鍵をリモートにコピーしたいのであれば,ssh-copy-idコマンドを利用できます。

(ローカルマシン上)$ ssh-copy-id (リモートマシンのアドレス)

公開鍵認証が使えるようになれば,そのホストに対するパスワード認証は不要になります。他のユーザーやサービスがパスワード認証を使っていないのであれば,無効化してしまうのもひとつの手です。

Ubuntuサーバーであれば,次のようにパスワード認証が有効化されています。

$ grep PasswordAuth /etc/ssh/sshd_config
#PasswordAuthentication yes
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication, then enable this but set PasswordAuthentication

重要なのは最初の行です。先頭の#はコメントアウトであり,SSHの設定だとコメントに初期設定値が書かれているため,⁠PasswordAuthenticationが有効化されている(yes)となっている」ことがわかります。

パスワード認証を無効化するには,最初の行の先頭の「#」を削除し,⁠yes」「no」に変更してください。設定ファイルを変更したらまずは正しく書けているかテストモードでチェックしましょう。

$ sudo sshd -t
/etc/ssh/sshd_config: line 124: Bad configuration option: BadConfigurationLine
/etc/ssh/sshd_config: terminating, 1 bad configuration options

上記のようにエラーメッセージが表示される場合は,何か設定を間違えています。何も表示されなくなるまでトライアンドエラーを繰り返してください。無事に設定が完了したら,SSHサーバーの設定を再読込させます。

$ sudo systemctl reload sshd.servie

ちなみにUbuntuのSSHサーバー向けのサービスファイルには,起動・再読込の前にsshd -tを実行するようになっています。

なお,SSH接続でしか到達できない環境でSSHサーバーの設定に失敗すると,お手上げです。なるべく他の方法でもサーバーに接続できるような「プランB」を用意した上で再起動することをおすすめします※3⁠。

※3
プランBの候補は環境により大きく異なります。商用のリモートサーバーであれば,シリアルコンソール接続をサポートしていることが一般的です。IPMI/BMCなどのリモート管理システムが搭載されている物理サーバーならipmitoolなどのコマンドを使うという手もあるでしょう。クラウドサービスなら,インスタンスを作り直して設定を再度流し込むのが一番の近道になりそうです。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。