【Linux】No.4 SSH編

目次

概要

Virtualbox の中にある Linux に Teraterm で CLI 接続しましょう。

本ハンズオンで身につくこと

  • SSH による遠隔操作
  • SSH 公開鍵認証方式

出てくるコマンド/操作/キーワード

  • systemctl
  • ssh
  • ssh-keygen
  • /etc/ssh/sshd_config

事前準備

  • ホスト OS に teraterm をインストール

構成図

fig-diagram

ハンズオン

Virtualbox のネットワーク設定

Virtualbox マネージャーのツール欄にマウスポインターを当てて「横線が3本並んでいるボタン」をクリックして、 出てきたメニューで「ネットワーク」を選択します。

vbox-tool

上の欄で「NAT ネットワーク」タブを選択して、下の欄で「ポートフォワーディング」タブを開きます。 画像の通りに値を入力して「適用」ボタンを押します。

vbox-portforwarding

SSH デーモンの確認

仮想マシンを起動します。以下のウインドウが表示されたら、2つともチェックを入れて「アクセスを許可する」ボタンを押します。

windows-firewall

Virtualbox のウインドウで端末を開きます。以下のコマンドを入力して SSH デーモンの状態を表示します。

[study@localhost ~]$ systemctl status sshd

以下のような結果が表示されます。Active: active (running) になっていたら起動しています。

● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2024-06-16 22:37:04 JST; 6min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 902 (sshd)
    Tasks: 1 (limit: 10937)
   Memory: 1.6M
   CGroup: /system.slice/sshd.service
           mq902 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.…

 6月 16 22:37:03 localhost.localdomain systemd[1]: Starting OpenSSH server daemon...
 6月 16 22:37:04 localhost.localdomain sshd[902]: Server listening on 0.0.0.0 port 22.
 6月 16 22:37:04 localhost.localdomain sshd[902]: Server listening on :: port 22.
 6月 16 22:37:04 localhost.localdomain systemd[1]: Started OpenSSH server daemon.
Tip

デーモンの起動・停止方法は【Linux】No.2 基本操作編を参照してください。

Windows から Linux に接続

Windows の PowerShell を起動して以下のコマンドを入力します。

PS C:\Users\*****> ssh -p 10022 study@localhost

初回接続時は以下のメッセージが出ますので、yesを入力します。

The authenticity of host '[localhost]:10022 ([127.0.0.1]:10022)' can't be established.
ECDSA key fingerprint is SHA256:********************************************
Are you sure you want to continue connecting (yes/no/[fingerprint])?

以下のメッセージが出たら、study ユーザーのパスワードを入力します。

Warning: Permanently added '[localhost]:10022' (ECDSA) to the list of known hosts.
study@localhost's password:

以下のメッセージが表示されたら成功です。exitを入力して終了できます。

Activate the web console with: systemctl enable --now cockpit.socket

Last login: XXX XXX XX XX:XX:XX XXXX from 172.24.0.2
[study@localhost ~]$
Tip

今回は Windows→Linux ですが、Linux→Linux でも操作は同じです。

SSH で使用する鍵を生成

Windows の PowerShell で以下のコマンドを入力します。コメント欄は好きな文字を入力してください。

PS C:\Users\*****> ssh-keygen -t ed25519 -C "comment"

以下のメッセージが表示されます。ウィザード方式なので必要なパラメータを入力します。

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\*****/.ssh/): 【C:\Users\*****\Desktop\id_ed25519 と入力する】
Enter passphrase (empty for no passphrase): 【鍵のパスフレーズ、空欄だと無しになる】
Enter same passphrase again:【鍵のパスフレーズ、上と同じものを入力する】

入力したパラメータから鍵を生成した結果が表示されます。

Your identification has been saved in C:\Users\*****\Desktop\id_ed25519.  『秘密鍵を保存した場所が表示される』
Your public key has been saved in C:\Users\*****\Desktop\id_ed25519.pub. 『公開鍵を保存した場所が表示される』
The key fingerprint is:
SHA256:******************************************* comment
The key's randomart image is:
+--[ED25519 256]--+
~省略~
+----[SHA256]-----+
Tip

今回は Windows ですが、Linux でも操作は同じです。

生成した公開鍵を Linux へ転送

Windows の PowerShell で以下のコマンドを入力します。

PS C:\Users\*****> cat ~/Desktop/id_ed25519.pub | ssh -p 10022 study@localhost `
" `
mkdir -p ~/.ssh && chmod 700 ~/.ssh && `
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys `
"

鍵認証を使用した SSH 接続

Windows の PowerShell で以下のコマンドを入力します。パスフレーズを設定している場合はコマンド実行後に入力します。

PS C:\Users\*****> ssh -p 10022 study@localhost -i ~/Desktop/id_ed25519

以下のメッセージが表示されたら成功です。

Activate the web console with: systemctl enable --now cockpit.socket

Last login: XXX XXX XX XX:XX:XX XXXX from 172.24.0.2
[study@localhost ~]$
Tip

今回は Windows→Linux ですが、Linux→Linux でも操作は同じです。

パスワード認証の禁止

Virtualbox のウインドウで端末を開きます。以下のコマンドを入力して/etc/ssh/sshd_config を編集します。 パスワードを求められるので、study ユーザーのパスワードを入力します。

[study@localhost ~]$ sudo vim /etc/ssh/sshd_config

70 行目付近に以下の記述があるので、PasswordAuthentication yesPasswordAuthentication noにします。

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes 【noに変更する】

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

以下のコマンドを入力して SSH デーモンを再起動します。

[study@localhost ~]$ sudo systemctl restart sshd

Windows の PowerShell で以下のコマンドを入力します。

PS C:\Users\*****> ssh -p 10022 study@localhost

以下のメッセージが表示されたら、正しく設定されていてパスワード認証が拒否されています。

study@localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

Windows の PowerShell で以下のコマンドを入力します。パスフレーズを設定している場合はコマンド実行後に入力します。

PS C:\Users\*****> ssh -p 10022 study@localhost -i ~/Desktop/id_ed25519

以下のメッセージが表示されたら、鍵認証でログインが成功しています。

Activate the web console with: systemctl enable --now cockpit.socket

Last login: XXX XXX XX XX:XX:XX XXXX from 172.24.0.2
[study@localhost ~]$

teraterm で Linux に接続

teraterm を起動して以下の画像のように値を入力して「OK」ボタンを押します。

teraterm1

以下の画像が出た場合は「このホストを~追加する」にチェックを入れて「続行」ボタンを押します。

teraterm1

「ユーザ名」には、Linux のユーザ名とパスワードを入力します。
「パスフレーズ」には、鍵に設定したパスフレーズを入力します。(無しの場合は空欄)
「認証方式」を「RSA/DSA ~/ED25519 鍵を使う」にして、前述で作った「id_ed25519」を選択します。
入力後に以下のような画面が表示されたら成功です。

teraterm1