ubuntu20.04にsshdをインストールして認証方式を鍵認証にします。Linux(ubuntu18.04)、windows10のそれぞれからログインできるようにします。このような構成です。
sshdのインストールと起動(ubuntu20.04)
ubuntu20.04にはSSH Serverとなるsshdがインストールされていないので、まずはこれをインストールします。作業はrootユーザーで行います。
sshdのパッケージの検索
# apt search sshd
いくつか結果が表示されますが以下のものをインストールします。
:
openssh-server/focal-updates,focal-security 1:8.2p1-4ubuntu0.2 amd64
secure shell (SSH) server, for secure access from remote machines
:
sshdのインストール
# apt install openssh-server
インストールが終わったらsshdを起動します。いったん設定はデフォルトのままです。
sshdの起動
# systemctl start sshd
今回の場合、SSH ServerのIPアドレスは 192.168.0.5 です。クライアントがSSH Serverのログインに使用するユーザーは tak となります。takのホームディレクトリ配下に .ssh ディレクトリがあることを確認しておいてください。ない場合は作成します。.sshディレクトリの作成はtakユーザーで行います。後ほど、このディレクトリに公開鍵を配置します。
.sshディレクトリの作成
$ mkdir .ssh
$ chmod 700 .ssh
ubuntu18.04、および、windows10からパスワード認証でログインできることを確認します。
sshコマンドでログイン(ubuntu18.04)
$ ssh tak@192.168.0.5
TeraTermのログイン画面(windows10)
鍵の作成(ubuntu18.04)
ssh-keygenコマンドを使用してクライアント側で秘密鍵と公開鍵を作成します。作成は任意のユーザです。鍵の形式はRSA、ビット長は4096としました。
鍵の生成
$ ssh-keygen -t rsa -b 4096
$ ssh-keygen -t rsa -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/usr/.ssh/id_rsa): Enter passphrase (empty for no passphrase): ←★パスフレーズの入力(任意) Enter same passphrase again: Your identification has been saved in /home/usr/.ssh/id_rsa. Your public key has been saved in /home/usr/.ssh/id_rsa.pub. The key fingerprint is: SHA256:bq+gdaaFKoUibFxLBMxBzJDnifRgv0X23aNVVQWFhU4 usr@ubuntu18.04 The key's randomart image is: +---[RSA 4096]----+ : : +----[SHA256]-----+
途中でパスフレーズの入力を求められますので任意で設定してください。入力なしでも構いません。ユーザーのホームディレクトリ配下の .ssh ディレクトリに秘密鍵と公開鍵が作成されます。デフォルトでは以下の名前になります。
・id_rsa(秘密鍵)
・id_rsa.pub(公開鍵)
このうち公開鍵の方をサーバー(ubuntu20.04)にアップロードします。アップロードにはscpコマンドを使用します。
公開鍵のアップロード
$ cd
$ scp .ssh/id_rsa.pub tak@192.168.0.5:~/.ssh/
アップロード先はtakユーザーのホームディレクトリ配下の.sshディレクトリです。~/.ssh は /home/tak/.ssh のことです。
鍵の作成(windows10)
windowsではTeraTermを使って鍵を作成します。設定から「SSH鍵生成」を選択します。
鍵生成の画面が表示されるので、鍵の種類はRSA、ビット数に4096を入力し「生成」ボタンを押下します。
鍵のパスフレーズを入力します。未入力でも構いません。「公開鍵の保存」および「秘密鍵の保存」ボタンを押下し、それぞれの鍵を保存します。秘密鍵の保存の際にパスフレーズが未入力だった場合は「空のパスフレーズを使用しますか?」と聞かれるのですが、「はい」を選択すれば生成されます。鍵の保存先は任意の場所で良いです。
保存した公開鍵をサーバー(ubuntu20.04)にアップロードします。まずパスワード認証でubuntu20.04にログインします。保存した鍵ファイルをTeraTermの画面にドラッグ&ドロップします。
ファイル転送の画面が表示されるので送信先を指定します。送信先ディレクトリはtakユーザーのホームディレクトリ配下の.sshディレクトリです。
「OK」ボタンを押下してファイルをアップロードします。
id_rsa.pubがscpでアップロードしたubuntu18.04の公開鍵、id_rsa_win.pubがwindows10の公開鍵です。
鍵認証方式への変更(ubuntu20.04)
takユーザーで鍵認証用のファイル「authorized_keys」を作成します。これは公開鍵をマージしたものです。
鍵認証ファイルの作成
$ cd .ssh
$ touch authorized_keys
$ chmod 600 authorized_keys
$ cat id_rsa.pub >> authorized_keys
$ cat id_rsa_win.pub >> authorized_keys
このような感じです。
authorized_keysが出来たら、id_rsa.pubとid_rsa_win.pubは不要なので削除します。
公開鍵ファイルの削除
$ rm id_rsa.pub
$ rm id_rsa_win.pub
次に、sshdの設定をパスワード認証から鍵認証に変更します。これはrootユーザーで作業します。
sshd_configの編集
# cd /etc/ssh
# vi sshd_config
viでの編集内容は、PasswordAuthenticationのコメントアウトを外してnoに変更します)。
編集前
#PasswordAuthentication yes
↓↓↓
編集後
PasswordAuthentication no
sshdを再起動します。
sshdの再起動
# systemctl restart sshd
鍵認証でログイン(ubuntu18.04)
sshコマンドの「-i」オプションで秘密鍵を指定してログインします。
鍵認証でログイン
$ ssh -i .ssh/id_rsa tak@192.168.0.5
なお、鍵の指定をしないでログインしようとすると「Permission denied (publickey).」となります。
$ ssh tak@192.168.0.5
tak@192.168.0.5: Permission denied (publickey).
鍵認証でログイン(windows10)
TeraTermでログインをします。ホストにIPアドレス、サービスにSSH、ポートに22を設定して接続すると、認証の画面が表示されます。ユーザー名とパスフレーズ(設定した場合のみ)を入力し、認証方式は「RSA/DSA/ECDSA/ED25529鍵を使う」にチェックをします。
秘密鍵の指定には保存した秘密鍵を指定します。今回はwindowsの秘密鍵の名前を「id_rsa_win」としたのですが、この名前だと秘密鍵と認識しないようですので名称を「id_rsa」に変更してください。
「OK」ボタンを押下するとログインできます。