VirtualBox(macOS)にUbuntu 24.04 LTSをインストール

VirtualBox にUbuntu Server 24.04 LTS をインストールする手順の解説です。

VirtualBox のインストールは「Mac(Apple silicon)にVirtualBoxをインストール」をご参照ください。

環境

  • MacBook Pro / M1 Pro チップ (Apple silicon)
  • macOS Sonoma (14.6)
  • VirtualBox (7.1.4)
  • Ubuntu Server (24.04.5 LTS) – 64bit ARM

Ubuntu Serverのダウンロード

Ubuntu のサイトにアクセスします。

メニューの[Get Ubuntu] をクリックします。

左のメニューの[Server] をクリックし、緑のボタン[Get Ubuntu Server] をクリックします。

青いリンク[Alternative architectures] をクリックします。

青いリンク[ARM] をクリックします。

緑のボタン[Download 24.04.1 LTS] をクリックすると、ISOファイルがダウンロードされます。

ARM64 向けのイメージファイル ubuntu-24.04.1-live-server-arm64.iso がダウンロードされました。

続けて、チェックサムのファイルをダウンロードします。
青いリンク[Alternative and previous releases] をクリックします。

[24.04.1/] をクリック、続けて[release/] をクリックします。

下にスクロールすると、チェックサムSHA256SUM のリンクがあります。

SHA256SUMSHA256SUM.gpg をダウンロードします。
※ Control キーを押しながらクリックし、ショートカットメニューの[リンク先のファイルをダウンロード] をクリックしてダウンロードします

チュートリアル(以下のリンク)に記載されている手順を参考に、ダウンロードしたISOファイルに破損などがないか検証します。
※ gnupg のインストールは既にインストールされていたので省略
※ coreutils のインストールはsha256sum の代わりにshasum を使うので省略

# Ubuntuの鍵サーバから公開鍵を取得してキーリングにインポート
% gpg --keyid-format long --keyserver hkp://keyserver.ubuntu.com --recv-keys 0x46181433FBB75451 0xD94AA3F0EFE21092
gpg: key D94AA3F0EFE21092: public key "Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>" imported
gpg: key 46181433FBB75451: public key "Ubuntu CD Image Automatic Signing Key <[email protected]>" imported
gpg: Total number processed: 2
gpg:               imported: 2

# キーリングにインポートした公開鍵のフィンガプリントを確認
% gpg --keyid-format long --list-keys --with-fingerprint 0x46181433FBB75451 0xD94AA3F0EFE21092
pub   rsa4096/D94AA3F0EFE21092 2012-05-11 [SC]
      Key fingerprint = 8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092
uid                 [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>

pub   dsa1024/46181433FBB75451 2004-12-30 [SC]
      Key fingerprint = C598 6B4F 1257 FFA8 6632  CBA7 4618 1433 FBB7 5451
uid                 [ unknown] Ubuntu CD Image Automatic Signing Key <[email protected]>

# 署名を使ってチェックサムファイルを検証
% gpg --keyid-format long --verify SHA256SUMS.gpg SHA256SUMS
gpg: Signature made Fri Aug 30 01:12:11 2024 JST
gpg:                using RSA key 843938DF228D22F7B3742BC0D94AA3F0EFE21092
gpg: Good signature from "Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092

# ISOファイルのチェックサムを検証
% shasum -c SHA256SUMS 2>&1 | grep OK
ubuntu-24.04.1-live-server-arm64.iso: OK

29行目のようにOK と表示されていれば問題なしです。

使い終わった公開鍵をキーリングから削除します。

% gpg --delete-keys 843938DF228D22F7B3742BC0D94AA3F0EFE21092
gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  rsa4096/D94AA3F0EFE21092 2012-05-11 Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>

Delete this key from the keyring? (y/N) y

% gpg --delete-keys C5986B4F1257FFA86632CBA746181433FBB75451
gpg (GnuPG) 2.4.5; Copyright (C) 2024 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  dsa1024/46181433FBB75451 2004-12-30 Ubuntu CD Image Automatic Signing Key <[email protected]>

Delete this key from the keyring? (y/N) y

% gpg --list-keys

Ubuntu Serverのインストール

1. VirtualBox を起動

VirtualBox アイコン

Launchpad のVirtualBox アイコンをダブルクリックします。

VirtualBox のウィンドウが表示されました。

2. 新しい仮想マシンの作成

メニューの[新規] をクリックします。

以下のように入力します。

  • 名称
    • 任意の仮想マシンの名前を入力
  • ISOイメージ
    • ダウンロードしたISOファイルを選択
  • 自動インストールをスキップ
    • チェックをON

他のアコーディオンメニューの中を見てみます。

自動インストールは、”自動インストールをスキップ” をON にしたので非活性になっています。

ハードウェアは、メモリーのサイズやCPU のプロセッサ数を変更できるようになっています。

ハードディスクは、ディスクのサイズ等を変更できるようになっています。

全て設定し終わったら[完了] をクリックします。

作成した仮想マシンの情報が表示されました。

3. 仮想マシンのネットワークの設定を変更

メニューの[設定] をクリックします。

左のメニューの[ネットワーク] をクリックします。

[アダプター2] の”ネットワークアダプターを有効化” のチェックをON にし、割り当てをホストオンリーネットワークにします。

[OK] ボタンをクリックして設定のウィンドウを閉じます。

4. 仮想マシンの起動

メニューの[起動] をクリックすると、仮想マシンのウィンドウが表示され、Ubuntu ServerISO ファイルを使ったインストールが始まります。

ウィンドウが小さく字が読めないので、メニューの[View] > [Virtual Screen 1] > [Scale to 200%] などを指定してサイズを大きくします。

ブートローダーが起動しました。

Try or Install Ubuntu Server” を選択してEnter キーを押下します。

  • Enter せずに放置すると、ハイライトされているエントリで処理が開始されます
  • キーボードとマウス操作がゲストOS 側(仮想マシン内)にある状態になるので、ホストOS 側(macOS)に戻したい場合はホストキーが割り当てられている左の[command] キー を押下します

5. 言語 – select your language

インストーラとインストールするOS のデフォルトの言語を選択します。

English” を選択してEnter キーを押下します。

6. インストーラの更新 – Installer update available

最新版のインストーラーに更新するか選択します。

今回は更新するので、下の[Update to the new installer] を選択してEnter キーを押下します。

7. キーボード – Keyboard configuration

使用している環境に合わせたキーボードを選択します。

今回は”Japanese” を選択します。
Layout で”Japanese” を選択すると、Variant も”Japanese” に変わりました。
下の[Done] を選択してEnter キーを押下します。

8. インストールの種類 – Choose the type of installation

インストールの種類を選択します。

今回は”Ubuntu Server” を選択して、[Done] でEnter キーを押下します。

  • Ubuntu Server
    • デフォルトの構成。快適に使えるよう厳選されたパッケージが含まれている
  • Ubuntu Server (minimized)
    • 最小の構成

9. ネットワーク – Network configuration

ネットワークの設定をします。

ネットワークアダプターに割り当てられたIPv4 アドレスが表示されています。
今回はこのままの状態で[Done] でEnter キーを押下します。

10. プロキシサーバ – Proxy configuration

プロキシサーバの設定をします。

今回はプロキシサーバを設定しないので、このままの状態で[Done] でEnter キーを押下します。

11. ミラーサーバの設定 – Ubuntu archive mirror configuration

Ubuntu のミラーサーバの設定をします。

GeoIP で取得した位置情報を使って選ばれたミラーサーバが自動で入力されています。
今回はこのままの状態で[Done] でEnter キーを押下します。

12. ストレージ – Storage configuration

ストレージの設定をします。

今回は記憶領域全体を使うので、”Use an entire disk” が選択された状態で[Done] でEnter キーを押下します。

  • LVM (論理ボリューム) を設定しない場合は、”Set up this disk as an LVM group” のチェックをOFF にします

ディスクのパーティショニングの設定をします。

パーティションのデフォルトの構成が表示されています。
今回はこのままの状態で[Done] でEnter キーを押下します。

13. インストール実行の確認 – Confirm destructive action

ここで[Continue] をクリックするとディスクのフォーマットが始まり後戻りできなくなるので、データが削除されてもよいのかの確認です。

[Continue] を選択してEnter キーを押下します。

14. プロファイル – Profile configuration

sudo が利用できるadministrator 権限のユーザーを作成します。

  • Your name
    • フルネームなど (任意)
  • Your servers name
    • ホスト名 (hostname)
  • Pick a username
    • ログイン時にユーザーの識別子として入力するユーザー名
  • Choose a password / Confirm your password
    • ユーザーのパスワード

任意の値を入力して、[Done] でEnter キーを押下します。
※ 上の画像では全て”ubuntu” の悪い例です

15. アップグレード – Upgrade to Ubuntu Pro

Ubuntu Pro にアップグレードするかの確認です。

今回はアップグレードしないので、”Skip for now” が選択された状態で[Continue] でEnter キーを押下します。

16. SSHサーバ – SSH configuration

OpenSSH サーバの設定をします。

今回はOpenSSH サーバをインストールするので、”Install OpenSSH server” のチェックをON にして、[Done] でEnter キーを押下します。

  • “Import SSH key” で、プロファイルの設定で作成したユーザーのSSH 公開鍵認証に使う公開鍵をGitHub やLaunchpad から取得して登録することができるようです(今回はやりませんでした)

17. Snapパッケージ – Featured server snaps

追加するパッケージを選択します。

今回は追加しないので、何も選択しないで[Done] でEnter キーを押下します。

このタイミングで、Ubuntu Server のインストールが開始されます。
インストールが完了するまで、そのまま待機します。

18. インストール完了 – Installation Complete!

“Installation complete!” と表示され、下に[Reboot Now] のボタンが表示されたらインストール完了です。

続けて、Ubuntu Server をインストールした仮想マシンを起動します。
[Reboot Now] を選択してEnter キーを押下します。

19. Ubuntu Server 起動・ログイン

Ubuntu Server の仮想マシンが起動します。

Failed unmounting cdrom.mount – /cdrom” と表示されました。インストールメディアのマウント解除に失敗したようです。
とりあえずEnter キーを押下します。

ubuntu login:” と表示されました。
登録したユーザー名を入力しEnter キーを押下し、続けて”Password:” と表示されたらパスワードを入力してEnter キーを押下します。

Ubuntu のプロンプトの入力ができる状態になりました。ログイン成功です。

正常にインストールできているようです。

インストール直後の状態の確認

ターミナルで確認します。

$ uname -a
Linux ubuntu 6.8.0-50-generic #51-Ubuntu SMP PREEMPT_DYNAMIC Sat Nov  9 18:03:35 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

$ cat /etc/default/locale
LANG=en_US.UTF-8

$ timedatectl | grep "Time zone"
                Time zone: Etc/UTC (UTC, +0000)

$ cat /etc/default/keyboard
XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"

$ hostname
ubuntu

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:28:74:25 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s8
       valid_lft 84622sec preferred_lft 84622sec
    inet6 fd00::a00:27ff:fe28:7425/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 86132sec preferred_lft 14132sec
    inet6 fe80::a00:27ff:fe28:7425/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:5d:c9:b1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.3/24 metric 100 brd 192.168.56.255 scope global dynamic enp0s9
       valid_lft 84625sec preferred_lft 84625sec
    inet6 fe80::a00:27ff:fe5d:c9b1/64 scope link
       valid_lft forever preferred_lft forever

$ sudo cat /etc/netplan/50-cloud-init.yaml
network:
    ethernets:
        enp0s8:
            dhcp4: true
        enp0s9:
            dhcp4: true
    version: 2

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=255 time=8.10 ms

$ cat /etc/passwd | grep ubuntu
ubuntu:x:1000:1000:ubuntu:/home/ubuntu:/bin/bash

$ ls -l /etc/ssh/ssh_host_*_key.pub
-rw-r--r-- 1 root root 173 Dec 13 07:08 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r--r-- 1 root root  93 Dec 13 07:08 /etc/ssh/ssh_host_ed25519_key.pub
-rw-r--r-- 1 root root 565 Dec 13 07:08 /etc/ssh/ssh_host_rsa_key.pub

$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:XonJYgM2Wno7ezMeGynk2tvoRsqyxh+aAA5ntNiJ3B0 root@ubuntu (ECDSA)

$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:JOUXVzItaxmQchZfw6VNXbgkl1NMuU/0lnrCnUX1mo8 root@ubuntu (ED25519)

$ ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
3072 SHA256:uAciglpU/t8CIwrAwzUbUhRKbcv1zg9ZTA5b7fErL10 root@ubuntu (RSA)

初期設定

タイムゾーン

UTC から日本のタイムゾーンに変更します。

# 変更前の確認
$ timedatectl | grep "Time zone"
                Time zone: Etc/UTC (UTC, +0000)

$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Dec 14 13:45 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC

$ timedatectl list-timezones | grep Tokyo
Asia/Tokyo

# 変更
$ sudo timedatectl set-timezone Asia/Tokyo

# 変更後の確認
$ timedatectl | grep "Time zone"
                Time zone: Asia/Tokyo (JST, +0900)

$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 Dec 14 22:59 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo

$ date
Sun Dec 14 11:00:51 PM JST 2024

変更後に/etc/timezone を見ると変わっていませんでした。
Ubuntu 22.04 では変わったのですが。。

$ cat /etc/timezone
Etc/UTC

ネットワーク:ホスト名

インストール時に仮で登録していたホスト名を変更します。

$ hostname
ubuntu

$ sudo hostnamectl set-hostname a.sample

$ hostname
a.sample

ネットワーク:IP アドレス (IPv4)

ゲストOS に固定アドレスを設定します。

ホストOS 側でゲストOS に固定アドレスを割り当てられる方法がないか調べましたが、どうやらできないようです。(”あとがき”参照)

Netplan を使って、ゲストOS に192.168.56.11 が割れ当てられるように設定します。

$ sudo vi /etc/netplan/99-config.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s8:
      dhcp4: true
    enp0s9:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.56.11/24]

$ sudo chmod 600 /etc/netplan/99-config.yaml

$ sudo netplan apply

$ ip a show dev enp0s9
3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:5d:c9:b1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.11/24 brd 192.168.56.255 scope global enp0s9
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5d:c9b1/64 scope link
       valid_lft forever preferred_lft forever

ホストOS 側(Mac)のhosts に登録してホストOS からドメイン名で名前解決されるようにします。

% sudo vi /etc/hosts

192.168.56.11 a.sample

ゲストOS に登録したドメイン名で名前解決ができることを確認します。

% ping -c 1 a.sample
PING a.sample (192.168.56.11): 56 data bytes
64 bytes from 192.168.56.11: icmp_seq=0 ttl=64 time=0.947 ms

SSH

SSH サーバの状態と、ゲストOS のローカル環境でSSH 接続できることを確認します。

$ systemctl is-enabled ssh
disabled

$ systemctl is-active ssh
active

$ ssh ubuntu@localhost

$ exit

disabled なので自動起動の設定が無効になっていますが、このまま進めます。

ファイアウォール の状態を確認し、SSH 向けポート番号22 をアクセス許可する設定を登録します。
登録したらファイアウォールを有効にします。

$ sudo ufw status verbose
Status: inactive

$ sudo ufw app list
Available applications:
  OpenSSH

$ sudo ufw allow 'OpenSSH'
Rules updated
Rules updated (v6)

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

ホストOS 側(Mac)からゲストOS にSSH 接続できることを確認します。
※ 5行目では事前に確認していたホスト鍵のフィンガープリント(Ed25519)を入力しています

% ssh [email protected]
The authenticity of host 'a.sample (192.168.56.11)' can't be established.
ED25519 key fingerprint is SHA256:JOUXVzItaxmQchZfw6VNXbgkl1NMuU/0lnrCnUX1mo8.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? SHA256:JOUXVzItaxmQchZfw6VNXbgkl1NMuU/0lnrCnUX1mo8
Warning: Permanently added 'a.sample' (ED25519) to the list of known hosts.
[email protected]'s password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-50-generic aarch64)

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

 System information as of Fri Dec 13 02:56:03 PM UTC 2024

  System load:             0.0
  Usage of /:              40.3% of 10.70GB
  Memory usage:            8%
  Swap usage:              0%
  Processes:               92
  Users logged in:         1
  IPv4 address for enp0s8: 10.0.2.15
  IPv6 address for enp0s8: fd00::a00:27ff:fe28:7425


Expanded Security Maintenance for Applications is not enabled.

70 updates can be applied immediately.
To see these additional updates run: apt list --upgradable

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

% exit

ネットワーク:ソケット

接続待ちのソケットの状態を確認します。

$ ss -lnt
State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port      Process
LISTEN      0           4096             127.0.0.53%lo:53                  0.0.0.0:*
LISTEN      0           4096                127.0.0.54:53                  0.0.0.0:*
LISTEN      0           4096                         *:22                        *:*

$ ss -lnu
State      Recv-Q      Send-Q              Local Address:Port           Peer Address:Port     Process
UNCONN     0           0                      127.0.0.54:53                  0.0.0.0:*
UNCONN     0           0                   127.0.0.53%lo:53                  0.0.0.0:*
UNCONN     0           0                10.0.2.15%enp0s8:68                  0.0.0.0:*

パッケージの更新

パッケージを最新に更新します。

$ sudo apt update

$ sudo apt upgrade

ネットワーク:ポートスキャン

ホストOS からゲストOS の開いているポートを確認します。

% sudo nmap -n -v a.sample
Starting Nmap 7.95 ( https://nmap.org ) at 2024-12-21 12:30 JST
Initiating ARP Ping Scan at 12:30
Scanning a.sample (192.168.56.11) [1 port]
Completed ARP Ping Scan at 12:30, 0.02s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 12:30
Scanning a.sample (192.168.56.11) [1000 ports]
Discovered open port 22/tcp on 192.168.56.11
Completed SYN Stealth Scan at 12:30, 4.30s elapsed (1000 total ports)
Nmap scan report for a.sample (192.168.56.11)
Host is up (0.00070s latency).
Not shown: 999 filtered tcp ports (no-response)
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 08:00:27:5D:C9:B1 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)

Read data files from: /opt/homebrew/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 4.35 seconds
           Raw packets sent: 2003 (88.116KB) | Rcvd: 5 (204B)

SSH の22/TCP のみ検出されました。

あとがき

一通りの作業が終わり、やり残した感があることを書いておきます。

  • Ubuntu Server、今度は最小構成でインストールしてみよう
  • SSH サーバの設定で公開鍵をGitHub から登録する手順をやってみたい
  • 新しい仮想マシンの作成で自動インストールを有効にするとどうなるか試してみたい

VboxManageというCLIツール

VirtualBox にVboxManage というCLI ツールがあったので、今回少し触ってみました。

ホストOS 側でゲストOS に固定アドレスを割り当てたかったのですが、画面上ではそのような設定がなかったので、VboxManage でできないか調べましたが見つかりませんでした。その調査過程のメモです。

VirtualBox のDHCP サーバーを確認

% VBoxManage list dhcpservers
NetworkName:    HostInterfaceNetworking-vboxnet0
Dhcpd IP:       192.168.56.100
LowerIPAddress: 192.168.56.101
UpperIPAddress: 192.168.56.254
NetworkMask:    255.255.255.0
Enabled:        Yes
Global Configuration:
    minLeaseTime:     default
    defaultLeaseTime: default
    maxLeaseTime:     default
    Forced options:   None
    Suppressed opts.: None
        1/legacy: 255.255.255.0
Groups:               None
Individual Configs:   None

ホストオンリーネットワークを確認

% VboxManage list hostonlynets
Name:            HostNetwork
GUID:            02bbf065-ee56-4ee5-aa05-c07358e4aad0

State:           Enabled
NetworkMask:     255.255.255.0
LowerIP:         192.168.56.1
UpperIP:         192.168.56.199
VBoxNetworkName: hostonly-HostNetwork

VirtualBox のDHCPには、VirtualBox がNAT の接続で内部的に使っているDHCP と、ホストオンリーネットワークのDHCP の2種類がある。
ゲストOS のホストオンリーネットワークを割り当てたアダプターにIPアドレスを割り当てるのは、後者の方。

内部的に使っているDHCP サーバーでは、固定アドレスを割り当てる方法がありました。(欲しいのはこれではない)

VBoxManage dhcpserver modify <--network=netname | --interface=ifname> <--mac-address=address> [--fixed-address=address]

ホストオンリーネットワークのDHCP サーバーに同様のコマンドがないか調べましたが見つかりませんでした。

% VBoxManage hostonlynet
Usage - Host Only Network management:

  VBoxManage hostonlynet add <--name=netname> [--id=netid] <--netmask=mask> <--lower-ip=address>
      <--upper-ip=address> [--enable | --disable]

  VBoxManage hostonlynet modify <--name=netname | --id=netid> [--lower-ip=address] [--upper-ip=address]
      [--netmask=mask] [--enable | --disable]

  VBoxManage hostonlynet remove <--name=netname | --id=netid>

VboxManage のヘルプは、コマンドを途中まで入力して実行したり、help にサブコマンドを指定して確認できます。

$ VboxManage
 〜 省略 〜

$ VboxManage list
Usage - View system information and VM configuration details:

  VBoxManage list [--long] [--platform-arch= x86 | arm] [--sorted] [bridgedifs | cloudnets |
      cloudprofiles | cloudproviders | cpu-profiles | dhcpservers | dvds | extpacks | floppies | groups |
      hddbackends | hdds | hostcpuids | hostdrives | hostdvds | hostfloppies | hostinfo | hostonlyifs |
      hostonlynets | intnets | natnets | ostypes | ossubtypes | runningvms | screenshotformats |
      systemproperties | usbfilters | usbhost | vms | webcams]

$ VboxManage help list
 〜 省略 〜

参照

Mac(Apple silicon)にVirtualBoxをインストール

VirtualBox のバージョン7.1 でApple siliconmacOS をサポートしたのでインストールしてみました。

環境

M1 ProチップのMacBook Pro にインストールします。
OS はmacOS Sonoma(14.6.1)です。

インストール方法の確認

VirtualBox のイメージファイルをダウンロードできるサイトとHomebrew を調べてみました。

結論になりますが、VirtualBox 公式サイトからApple silicon に対応した最新版のイメージファイルをダウンロードしてインストールすることにしました。
それ以外は、Applie silicon に対応した最新版が提供されていませんでした。(今後変わるかもしれませんが、2024.12.1時点ではそのような状態でした)

VirtualBox公式サイト

VirtualBox 公式サイトのダウンロードページにアクセスします。

VirtualBox Platform Packages というのがあり、VirtualBox 7.1.4 platform packages と記載されています。
バージョン7.1.4 がダウンロードできます。

トップページから、Recent Releases のRead More というリンクをクリックして表示されるNews のページを見ると、7.1.4 が最新のようでした。(2024.12.1 時点)

  • News – VirtualBox公式

Oracle公式サイト

Oracle 公式サイトのVirtualBox のダウンロードページにアクセスします。

Oracle VM VirtualBox Base Packages – 7.0.22 というのがあります。
ダウンロードできるのはバージョン7.0.22 のようです。
Apple silicon のサポートはバージョン7.1 からなので、x86 (Intel) 版しかダウンロードできないようです。

Homebrew

Homebrew のサイトでパッケージを検索します。
※ 検索キーワード:virtualbox

パッケージ名 virtualbox が見つかりました。
Current version: 7.1.4,165100 なので最新版7.1.4 ですが、Virtualiser for x86 hardware となっています。
よく分かりませんが、x86 (Intel) 版のみのようです。

下の方を見ると、Conflicts with casks にパッケージ名virtualbox@beta というのがあり、バージョンが7.1.5-165995Virtualizer for x86 and arm64 hardware となっていたのでリンク先を見てみます。

VirtualBox 公式サイトで公開されている7.1.4 より新しいApple silicon 対応版の7.1.5 ですが、パッケージ名からベータ版のようです。

手順

以下、VirtualBox 公式サイトからApple silicon に対応した最新バージョン7.1.4 のイメージファイルをダウンロードしてインストールします。(2024.12.1 時点)

1. ダウンロード

VirtualBox 公式サイトのダウンロードページにアクセスします。

VirtualBox Platform PackagesmacOS / Apple Silicon hosts をクリックして.dmg ファイルをダウンロードします。
VirtualBox-7.1.4-165100-macOSArm64.dmg というファイルがダウンロードされました。

続けて、下のFile ChecksumsSHA256 checksums をクリックしてチェックサムファイルをダウンロードします。
SHA256SUMS というファイルがダウンロードされました。

ダウンロードしたファイルに破損などがないか、チェックサムを確認します。
※ ダウンロードした2つのファイルを同じ場所に保存して、以下のコマンドを実行します。

% grep VirtualBox-7.1.4-165100-macOSArm64.dmg SHA256SUMS | shasum -a 256 -c
VirtualBox-7.1.4-165100-macOSArm64.dmg: OK

OK と表示されました。大丈夫そうです。

2. VirtualBox のインストール

ダウンロードしたdmg ファイルをダブルクリックします。
以下のウィンドウが表示されます。

VirtualBox.pkg” のアイコンをダブルクリックします。

はじめに
[続ける] をクリックします。

インストール先
希望するインストール先を選択して、[続ける] をクリックします。
※ “このコンピュータのすべてのユーザ用にインストール” を選択しました

インストールの種類
カスタマイズできるようなので、[カスタマイズ] をクリックします。

Command Line Utilities” が選択できるようになっていました。
デフォルトのチェックON のまま、[インストール] をクリックします。

概要
インストールが完了しました” と表示されたら、[閉じる]をクリックします。

VirtualBox のインストールはこれで完了です。

3. VirtualBox の初回起動

続けて、インストールしたVirtualBox を起動します。

VirtualBox アイコン

Launchpad のVirtualBox アイコンをダブルクリックします。

ようこそVirtualBoxへ!” という画面が表示されました。

4. Experience Mode の選択

起動した画面にExperience Mode について説明が書かれていました。

デフォルトはBasic Mode で一部のオプションやツール、ウィザードが非表示になっていて、Expert Mode にするとそれらを表示できるようです。

  • Basic Mode
    • 高度な機能に興味がなく、シンプルなUIを好むユーザー向け
  • Expert Mode
    • 全ての機能を使いたい経験者向け

右にあるボタンで選択できるようなのでクリックすると、ボタンと説明書きが消えました。

BasicExpert の切替は、[環境設定] をクリックして表示されるPreferences 画面の左上でできるようになっています。

どういう機能があるか把握しておきたいので、Expert Mode を選択することにしました。

5. VirtualBox Extension Pack を有効にする

メニューの[ファイル] > [ツール] > [機能拡張パックマネージャー] をクリックします。

一覧に”Oracle VM VirtualBox Extension Pack” が表示されていますが、有効欄に赤い[]マークが表示されていて、バージョンが7.0.0r153978 となっています。

VirtualBox 公式サイトに本体と同じバージョン7.1.4 のExtension Pack があったので、現在インストールされているものを削除し、バージョン7.1.4 のExtension Pack をインストールします。

まず、一覧のExtension Pack を選択し、[アンインストール] をクリックします。

確認メッセージが表示されたら、[除去] をクリックします。
一覧から消えました。

続けて、VirtualBox 公式サイトのダウンロードページにアクセスします。

VirtualBox Extension PackVirtualBox 7.1.4 Extension Pack と記載されています。

[PUEL License FAQ] をクリックして表示されるページでExtension Pack のライセンスの内容を確認します。

VirtualBox Extension Pack は、個人または教育の用途であれば無料で利用でき、ほとんどの商用または非配布の用途には有償で利用できる、と書かれています。

元の画面に戻り、[Accept and download]クリックしてExtension Pack のファイルをダウンロードします。
Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack というファイルがダウンロードされました。

ダウンロードしたファイルに破損などがないか、チェックサムを確認します。
※ 既にダウンロードしているチェックサムファイルと同じ場所に保存して、以下のコマンドを実行します。

% grep Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack SHA256SUMS | shasum -a 256 -c
Oracle_VirtualBox_Extension_Pack-7.1.4.vbox-extpack: OK

OK と表示されました。大丈夫そうです。

ダウンロードしたExtension Pack のファイルをダブルクリックします。

確認メッセージが表示されたら、[インストール] をクリックします。

ライセンスを確認するウィンドウが表示されたら、[同意します] をクリックします。

一覧に”Oracle VirtualBox Extension Pack” が表示され、有効欄が緑のチェックマークでバージョンが7.1.4r165100 になっています。

6. ネットワークの設定を確認する

メニューの[ファイル] > [ツール] > [ネットワークマネージャー] をクリックします。

ホストオンリーネットワークに設定されている一覧が表示されます。
[プロパティ] をクリックすると、一覧で選択しているホストオンリーネットワークに設定されている値が下に表示されるので、適宜変更します。
今回は、変更せずにデフォルトのまま使うことにしました。

あとがき

次回、VirtualBox に仮想マシンをインストールする手順を解説する予定です。
※ 下記、インストールしたいOS

  • Ubuntu Server 22.04
  • Rocky Linux 8
  • AlmaLinux 8

参照

VMware Fusion(M1 Mac)にUbuntu 22.04.3 LTSをインストール

VMware Fusion にUbuntu Server をインストールする手順の解説です。

VMware Fusion のインストールは「M1 MacにVMware Fusionをインストール」をご参照ください。

環境

  • MacBook Pro / M1 Pro チップ (Apple Silicon)
  • macOS Monterey (12.6.7)
  • VMware Fusion Player (13.5.0)
  • Ubuntu Server (22.04.3 LTS) – Apple Silicon (ARM64)

Ubuntu Serverのダウンロード

Ubuntu のサイトのダウンロードページにアクセスします。

下にスクロールします。
(”Alternative architectures” のクリックでもよいです)

Alternative architecturesUbuntu Server for ARM のリンク”Get Ubuntu Server for ARM” をクリックします。

緑のボタン”Download Ubuntu 22.04.3 LTS” をクリックしてISOファイルをダウンロードします。

ARM64 向けのイメージファイル ubuntu-22.04.3-live-server-arm64.iso がダウンロードされました。

ダウンロードしたファイルに破損などがないか、チェックサムを確認します。

ARM64 向けのチェックサムは、ダウンロードしたファイルの検証方法が記載されたチュートリアル(以下のリンク)から辿ったページにありました。

辿る順番は、3. Download checksums and signatures の本文中のURL(http://releases.ubuntu.com) > Ports, Unsupported, and Experimental Images for Ubuntu > 22.04.3/ > release/ の順で以下のページが表示されます。

下にスクロールすると、チェックサムSHA256SUM のリンクがあります。

SHA256SUMS” をクリックすると複数のチェックサムがプレーンテキストで表示されました。

ARM64 向けイメージファイルのチェックサムは1行目にありました。

5702372d25111e24d59596de62ae24daef873018cbf63c9dd9ff12292a57aca9 *ubuntu-22.04.3-live-server-arm64.iso

このプレーンテキストのページはチェックサムの検証で使える形式になっているので、イメージファイルと同じ場所に保存します。

ターミナルで保存したフォルダにcd してから、下記コマンドを実行して検証します。

% shasum -c SHA256SUMS
ubuntu-22.04.3-live-server-arm64.iso: OK

2行目のようにOK と表示されていれば問題なしです。

Ubuntu Serverのインストール

1. VMware Fusion を起動

VMware Fusion アイコン

Launchpad のVMware Fusion アイコンをダブルクリックします。

2. 新しい仮想マシンの作成

VMware Fusion のウィンドウが表示されました。

左上の[+] をクリックして表示されるメニューの中から[新規…] をクリックします。

ディスクまたはイメージからインストール” の枠内に、ダウンロードしたISO ファイルをドラッグ&ドロップします。

インストールディスクとしてドラッグ&ドロップしたISO ファイルのファイル名が表示され選択されているので、[続ける] をクリックします。

仮想マシンの概要が表示されています。
今回はこの構成のままでよいので[終了] をクリックします。

ここで、仮想マシンをファイルで保存するため、ファイル名の入力を求められます。

任意のファイル名を入力して[保存] をクリックします。

3. 仮想マシンの起動

作成した仮想マシンのウィンドウが既に開いています。

大きい再生ボタンをクリックすると、Ubuntu ServerISO ファイルを使ったインストールが開始します。

ブートローダーが起動しました。

Try or Install Ubuntu Server” を選択してEnter キーを押下します。

  • Enter せずに放置すると、ハイライトされているエントリで処理が開始されます
  • キーボードとマウス操作がゲストOS 側(仮想マシン内)にある状態になるので、ホストOS 側(macOS)に戻したい場合は[control]+[command] を押下します

4. 言語 – select your language

インストーラとインストールするOS のデフォルトの言語を選択します。

English” を選択してEnter キーを押下します。

5. インストーラの更新 – Installer update available

最新版のインストーラーに更新するか選択します。

今回は更新するので、下の[Update to the new installer] を選択してEnter キーを押下します。

6. キーボード – Keyboard configuration

使用している環境に合わせたキーボードを選択します。

今回は”Japanese” を選択します。
Layout で”Japanese” を選択すると、Variant も”Japanese” に変わりました。
下の[Done] を選択してEnter キーを押下します。

7. インストールの種類 – Choose type of install

インストールの種類を選択します。

今回は”Ubuntu Server” を選択して、[Done] でEnter キーを押下します。

  • Ubuntu Server
    • デフォルトの構成。快適に使えるよう厳選されたパッケージが含まれている
  • Ubuntu Server (minimized)
    • 最小の構成

8. ネットワーク – Network connections

ネットワークの設定をします。

VMware 上のDHCP により割り当てられたIPv4 アドレスが表示されています。
今回はこのままの状態で[Done] でEnter キーを押下します。

9. プロキシサーバ – Configure proxy

プロキシサーバの設定をします。

今回はプロキシサーバを設定しないので、このままの状態で[Done] でEnter キーを押下します。

10. ミラーサーバの設定 – Configure Ubuntu archive mirror

Ubuntu のミラーサーバの設定をします。

GeoIP で取得した位置情報を使って選ばれたミラーサーバが自動で入力されています。
今回はこのままの状態で[Done] でEnter キーを押下します。

11. ストレージ – Storage configuration

ストレージの設定をします。

今回は記憶領域全体を使うので、”Use an entire disk” が選択された状態で[Done] でEnter キーを押下します。

  • LVM (論理ボリューム) を設定しない場合は、”Set up this disk as an LVM group” のチェックをOFF にします

ディスクのパーティショニングの設定をします。

パーティションのデフォルトの構成が表示されています。
今回はこのままの状態で[Done] でEnter キーを押下します。

12. インストール実行の確認 – Confirmation destructive action

インストール作業の続行でフォーマットされるのでデータが削除されてもよいのかの確認です。

[Continue] を選択してEnter キーを押下します。

13. プロファイル – Profile setup

sudo が利用できるadministrator 権限のユーザーを作成します。

  • Your name
    • フルネームなど (任意)
  • Your servers name
    • ホスト名 (hostname)
  • Pick a username
    • ログイン時にユーザーの識別子として入力するユーザー名
  • Choose a password / Confirm your password
    • ユーザーのパスワード

任意の値を入力して、[Done] でEnter キーを押下します。

14. アップグレード – Upgrade to Ubuntu Pro

Ubuntu Pro にアップグレードするかの確認です。

今回はアップグレードしないので、”Skip for now” が選択された状態で[Continue] でEnter キーを押下します。

15. SSHサーバ – SSH Setup

OpenSSH サーバの設定をします。

今回はOpenSSH サーバをインストールするので、”Install SSH server” のチェックをON にして、[Done] でEnter キーを押下します。

  • “Import SSH identity” で、プロファイルの設定で作成したユーザーのSSH 公開鍵認証に使う公開鍵をGitHub やLaunchpad から取得して登録することができるようです(今回はやりませんでした)

16. Snapパッケージ – Featured Server Snaps

追加するパッケージを選択します。

今回は追加しないので、何も選択しないで[Done] でEnter キーを押下します。

ここで、Ubuntu Server のインストールが開始されます。
インストールが完了するまで、そのまま待機します。

17. インストール完了 – Install Complete!

“Install complete!” と表示され、下に[Reboot Now] のボタンが表示されたらインストール完了です。

続けて、Ubuntu Server をインストールした仮想マシンを起動します。
[Reboot Now] を選択してEnter キーを押下します。

18. Ubuntu Server 起動・ログイン

Ubuntu Server の仮想マシンが起動します。

“Failed unmounting /cdrom” と表示されました。インストールメディアのマウント解除に失敗したようです。
とりあえずEnter キーを押下します。

“ubuntu login:” と表示されましたが、続けてログが表示されてしまいました。SSH ホスト鍵の情報があるので、初回起動時のみ表示される内容のようです。

この状態でEnter キーを押下します。

末尾に”ubuntu login:” が表示されるので、登録したユーザー名を入力しEnter キーを押下し、続けて”Password:” と表示されたらパスワードを入力してEnter キーを押下します。

Ubuntu のプロンプトの入力ができる状態になりました。ログイン成功です。

正常にインストールできているようです。

インストール直後の状態の確認

ターミナルで確認します。

$ uname -a
Linux ubuntu 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:29:11 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

$ cat /etc/default/locale
LANG=en_US.UTF-8

$ cat /etc/timezone
Etc/UTC

$ cat /etc/default/keyboard
XKBMODEL="pc105"
XKBLAYOUT="jp"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"

$ hostname
ubuntu

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:7b:b2:4c brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.156.134/24 metric 100 brd 192.168.156.255 scope global dynamic ens160
       valid_lft 1636sec preferred_lft 1636sec
    inet6 fe80::20c:29ff:fe7b:b24c/64 scope link
       valid_lft forever preferred_lft forever

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=13.2 ms

$ cat /etc/passwd | grep ubuntu
ubuntu:x:1000:1000:ubuntu:/home/ubuntu:/bin/bash

初期設定

タイムゾーン

UTC から日本のタイムゾーンに変更します。

$ cat /etc/timezone
Etc/UTC

$ timedatectl list-timezones | grep Tokyo
Asia/Tokyo

$ sudo timedatectl set-timezone Asia/Tokyo

$ cat /etc/timezone
Asia/Tokyo

ネットワーク:ホスト名

インストール時に仮で登録していたホスト名を変更します。

$ hostname
ubuntu

$ sudo hostnamectl set-hostname d.test

$ hostname
d.test

ネットワーク:IP アドレス (IPv4)

ホストOS 側の設定ファイルでDHCP で固定アドレスが割り当てられるようにします。

ホストOS 側の作業をする為に、ゲストOS をシャットアウトします。

$ sudo shutdown -h now

ここから、ホストOS 側の作業です。

DHCP サーバの割り当て範囲を確認すると、192.168.156.128 〜 192.168.156.254 でした。

% cat /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf
 〜 省略 〜
subnet 192.168.156.0 netmask 255.255.255.0 {
	range 192.168.156.128 192.168.156.254;
 〜 省略 〜

ゲストOS に192.168.156.135 が割れ当てられるよう設定します。
MAC アドレスはip a で確認したアドレスを指定します。

% sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf
 〜 省略 〜
####### VMNET DHCP Configuration. End of "DO NOT MODIFY SECTION" #######
 〜 末尾に下記の4行を追記する 〜
host d.test {
    hardware ethernet 00:0c:29:7b:b2:4c;
    fixed-address  192.168.156.135;
}

VMware Fusionのネットワークサービスを再起動します。

% cd /Applications/VMware\ Fusion.app/Contents/Library/

% sudo ./vmnet-cli --stop
Stopped DHCP service on vmnet1
Stopped DHCP service on vmnet8
Stopped NAT service on vmnet8
Stopped all configured services on all networks

% sudo ./vmnet-cli --start
Enabled hostonly virtual adapter on vmnet1
Started DHCP service on vmnet1
Started NAT service on vmnet8
Enabled hostonly virtual adapter on vmnet8
Started DHCP service on vmnet8
Started all configured services on all networks

% sudo ./vmnet-cli --status
DHCP service on vmnet1 is running
Hostonly virtual adapter on vmnet1 is disabled
DHCP service on vmnet8 is running
NAT service on vmnet8 is running
Hostonly virtual adapter on vmnet8 is disabled
Some/All of the configured services are not running

hosts に登録してホストOS からドメイン名で名前解決されるようにします。

% sudo vi /etc/hosts
 〜 末尾に下記の1行を追記する 〜
192.168.156.135 d.test

ここで、ゲストOS を起動します。
設定したIP アドレスが割り当てられているか確認するため、ゲストOS でip a で確認すると、設定したアドレスが割り当てられていました。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:7b:b2:4c brd ff:ff:ff:ff:ff:ff
    altname enp2s0
    inet 192.168.156.135/24 metric 100 brd 192.168.156.255 scope global dynamic ens160
       valid_lft 1030sec preferred_lft 1030sec
    inet6 fe80::20c:29ff:fe7b:b24c/64 scope link
       valid_lft forever preferred_lft forever

SSH

SSH サーバの状態と、ゲストOS のローカル環境でSSH 接続できることを確認します。

$ systemctl is-enabled ssh
enabled

$ systemctl is-active ssh
active

$ ssh ubuntu@localhost

$ exit

ホストOS 側からSSH 接続できることを確認します。

% ssh [email protected]

% exit

ファイアウォール の状態を確認し、SSH 向けポート番号22 をアクセス許可する設定を登録します。
登録したらファイアウォールを有効にします。

$ sudo ufw status verbose
Status: inactive

$ sudo ufw app list
Available applications:
  OpenSSH

$ sudo ufw allow 'OpenSSH'
Rules updated
Rules updated (v6)

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

ホストOS 側からSSH 接続できることを確認します。

ネットワーク:ソケット

接続待ちのソケットの状態を確認します。

$ ss -lnt
State       Recv-Q      Send-Q           Local Address:Port           Peer Address:Port     Process
LISTEN      0           4096             127.0.0.53%lo:53                  0.0.0.0:*
LISTEN      0           128                    0.0.0.0:22                  0.0.0.0:*
LISTEN      0           128                       [::]:22                     [::]:*

$ ss -lnu
State     Recv-Q     Send-Q                  Local Address:Port         Peer Address:Port    Process
UNCONN    0          0                       127.0.0.53%lo:53                0.0.0.0:*
UNCONN    0          0              192.168.156.135%ens160:68                0.0.0.0:*

パッケージの更新

最後にパッケージを最新に更新します。

$ sudo apt update

$ sudo apt upgrade

あとがき

一通りの作業が終わり、やり残した感があることを書いておきます。

  • Ubuntu Server、今度は最小構成でインストールしてみよう
  • SSH サーバの設定で公開鍵をGitHub から登録する手順をやってみたい
  • ファイアウォールを有効にした後、アクセス許可していないポートがきちんとアクセス拒否できているか確認する方法をきちんと整理できていない(telnet d.test 80、nmap -p 80 d.test)

参照

VMware Fusion(M1 Mac)にKali Linuxをインストール

VMware FusionKali Linux をインストールする手順の解説です。

前回の「M1 MacにVMware Fusionをインストール」の続きです。

環境

  • MacBook Pro / M1 Pro チップ (Apple Silicon)
  • macOS Monterey (12.6.6)
  • VMware Fusion Player (13.0.2)
  • Kali Linux (2023.2) – Apple Silicon (ARM64)

Kali Linux のダウンロード

Kali Linux のサイトのダウンロードページにアクセスします。

Kali Linux > download 1

左の”Installer Images” をクリックします。

  • Installer Images
    • インストーラーのイメージファイル(ISO ファイル
  • Virtual Machines
    • 仮想マシンのパッケージファイル(.vmwarevm ファイル)
    • こちらにはApple Silicon 対応版はありませんでした(2023.6.17時点)
Kali Linux > download 2

“Kali Linux 2023.2 Changelog” の”Apple Silicon (ARM64)” を選択し、Recommended となっている”Installer” をクリックしてISO ファイルをダウンロードします。

2023.6.17の時点ではkali-linux-2023.2a-installer-arm64.iso というファイルがダウンロードされました。

ダウンロードしたファイルに破損などがないか、チェックサムを確認します。

Kali Linux > download 3

“Installer” の枠内の”sum” をクリックするとSHA256 のチェックサムが表示されます。

% shasum -a 256 kali-linux-2023.2a-installer-arm64.iso
94ce3f6b81be33e2f80de157d69222efbfe6c404491b25292a8058a62096c594 kali-linux-2023.2a-installer-arm64.iso

ターミナルで上記コマンドを実行して出力された文字列と、画面に表示されているSHA256sum の文字列が一致しているか確認します。

Kali Linux のインストール

1. VMware Fusion を起動

VMware Fusion アイコン

Launchpad のVMware Fusion アイコンをダブルクリックします。

2. 新しい仮想マシンの作成

VMware Fusion のウィンドウが表示されました。

VMware Fusion 起動

左上の[+] をクリックして表示されるメニューの中から[新規…] をクリックします。

VMware Fusion > インストール方法を選択

ディスクまたはイメージからインストール” の枠内に、ダウンロードしたISO ファイルをドラッグ&ドロップします。

VMware Fusion > 新しい仮想マシンを作成

インストールディスクとしてドラッグ&ドロップしたISO ファイルのファイル名が表示され選択されているので、[続ける] をクリックします。

VMware Fusion > オペレーティングシステムの選択

Linx > Debian 12.x 64ビット ARM を選択し、[続ける] をクリックします。

VMware Fusion > 仮想マシンの構成が完了

仮想マシンの概要が表示されています。
今回は構成の一部を変えるので[設定のカスタマイズ] をクリックします。

ここで、仮想マシンをファイルで保存するため、ファイル名の入力を求められます。

VMware Fusion > 仮想マシンのファイル保存

任意のファイル名を入力して[保存] をクリックします。

今回は、インストールで使ったISO ファイルが後で分かるように、ISO ファイルのファイル名の一部をファイル名に指定しました。

  • ファイルの拡張子は .vmwarevm です
  • 保存先のデフォルトはユーザーの仮想マシン フォルダです

3. 仮想マシンの構成の設定変更

VMware Fusion > 仮想マシンの設定変更

仮想マシンの構成を設定するウィンドウが表示されました。
今回はメモリのサイズを増やすので、”プロセッサとメモリ” をクリックします。

VMware Fusion > 仮想マシンの設定変更(プロセッサとメモリ)

メモリを2048 MB から4096 MB に変更して、上の”すべてを表示” をクリックします。
元のウィンドウに戻るので、他の設定も必要に応じて変更し、すべての変更が終わったらウィンドウを閉じます。

4. 仮想マシンの起動

作成した仮想マシンのウィンドウが既に開いています。

VMware Fusion > 仮想マシンの起動

大きい再生ボタンをクリックすると、Kali LinuxISO ファイルを使ったインストールが開始します。

インストーラのウィザードが表示されました。

Kali Linux > インストール > Graphical install

ここでは、インストールするモードを選択します。

今回は、”Graphical install” を選択してEnter を押下します。

  • Install” を選択すると青黒画面のUI になるので、マウス操作したい場合は”Graphical install” の方がよさそうです
  • Graphical install” では、青黒ではないグラフィカルなUI 上で操作することができ、マウスの操作も可能です
  • この青黒の画面ではキーボードでの操作しかできないので、上下で選択してEnter 押下で確定します
  • キーボードとマウス操作がゲストOS 側(仮想マシン内)にある状態になるので、ホストOS 側(macOS)に戻したい場合は[control]+[command] を押下します

5. 言語を選択 – Select a language

インストール手順で表示される言語を選択します。ここで選択した言語はインストールするOS のデフォルト言語として設定されます。

Kali Linux > インストール > Select a language

今回は”English” を選択して[Continue] をクリックします。

選択肢に”Japanese – 日本語” もありますが、Kali Linuxに関する情報はウェブ上では英語の方が日本語よりも多く存在するので、調査や検索で都合の良い英語を選択しました。

6. 所在地を選択 – Select your location

タイムゾーンとして設定する場所を選択します。

Kali Linux > インストール > Select your location 1

今回は日本を設定するので、”other” を選択して[Continue] をクリックします。

Kali Linux > インストール > Select your location 2

Asia” を選択して[Continue] をクリックします。

Kali Linux > インストール > Select your location 3

Japan” を選択して[Continue] をクリックします。

7. ロケールを選択 – Configure locales

ロケールを選択します。

Kali Linux > インストール > Configure locales

United States – en_US.UTF-8” を選択して[Continue] をクリックします。

8. キーボードの設定 – Configure the keyboard

キーボードレイアウトを選択します。

Kali Linux > インストール > Configure the keyboard

日本語配列キーボードを使っているので”Japanese” を選択して[Continue] をクリックします。

英語配列はたぶん”American English” です。

9. ネットワークの設定 – Configure the network

仮想マシンのホスト名とドメイン名を設定します。

Kali Linux > インストール > Configure the network 1
Hostname:

まずはホスト名を入力します。
ホスト名はネットワーク上で仮想マシンを識別する名前として使われます。
任意の名前(今回は”m1-kali”)を入力し、[Continue] をクリックします。

Kali Linux > インストール > Configure the network 2
Domain name:

次はドメイン名を入力します。
ドメイン名はインターネット上の識別子となるドメイン名を指定します。
公開しないので何も入力せず[Continue] をクリックします。

10. ユーザとパスワードの設定 – Setup users and passwords

rootユーザの代わりに使うroot 権限のないユーザを作成します。
インストールしたKali Linux に初回ログインする際に使うユーザです。

Kali Linux > インストール > Set up users and passwords 1
Full name for the new user:

まずは、ユーザのフルネームを入力します。
フルネームはユーザの名称として画面に表示される際に使われます。
任意の名称(今回は”capybara”)を入力し、[Continue] をクリックします。

Kali Linux > インストール > Set up users and passwords 2
Username for your account:

次に、ユーザのユーザ名を入力します。
ユーザ名はログイン画面でパスワードと組み合わせて入力する際に使うものです。
先頭文字(半角英小文字)+ 2文字目以降(半角英小文字、数字)にする必要があります。
任意の名称(今回は”capybara”)を入力し、[Continue] をクリックします。

Kali Linux > インストール > Set up users and passwords 3

パスワードを2箇所に入力し、[Continue] をクリックします。

11. ディスクのパーティショニング – Partition disks

ディスクのパーティショニングを行います。

Kali Linux > インストール > Partition disks 1
Partitioning method:

パーティショニングは、案内に従って行う方法と、手動で行う方法を選択することができます。

  • Guided – use entire disk
  • Guided – use entire disk and set up LVM
  • Guided – use entire disk and set up encrypted LVM
  • Manual

今回は”Guided – use entire disk” を選択して[Continue] をクリックします。

Kali Linux > インストール > Partition disks 2
Select disk to partition:

パーティショニングするディスクを選択します。
/dev/nvme0n1 – 21.5GB VMware Virtual NVMe Disk” のみ表示され選択されているので、[Continue] をクリックします。

Kali Linux > インストール > Partition disks 3
Partitioning scheme:

パーティショニングのスキームを選択します。

  • All files in one partition
  • Separate /home partition
  • Separate /home, /var, and /tmp partitions

今回は、初心者に推奨となっている”All files in one partition” を選択して[Continue] をクリックします。

Kali Linux > インストール > Partition disks 4

これまで設定してきたパーティションとマウントポイントの概要が表示されます。
このまま進めるので、”Finish partitioning and write changes to disk” を選択して[Continue] をクリックします。

Kali Linux > インストール > Partition disks 5

ディスクに書き込んでよいか確認が求められています。
[Yes] を選択して[Continue] をクリックします。

12. ソフトウェアを選択 – Software selection

Kali Linux にインストールするソフトウェアを選択します。
デフォルトで標準的なデスクトップ環境とツール類が選択された状態になっている、とのことです。

Kali Linux > インストール > Software selection

今回はデフォルトの状態で[Continue] をクリックします。

Kali Linux のインストールが開始されます。
インストールが完了するまで、そのまま待機します。

13. インストール完了 – Finish the installation

Kali Linux > インストール > Finish the Installation

Kali Linux のインストールが完了しました。

続けて、Kali Linux をインストールした仮想マシンを起動します。
インストールメディアを外すように求められていますが、VMware が自動でやってくれるようなので、このまま[Continue] をクリックします。

14. Kali Linux 起動・ログイン

Kali Linux の仮想マシンが起動します。

Kali Linux > 起動

Kali Linux の起動画面が表示され、”Kali GNU/Linux” が選択されています。
そのままで数秒後に自動で進みますが、Enter を押下して進めることもできます。

Kali Linux > ログイン

ログイン画面が表示されるので、登録したユーザ名パスワードを入力して[Log in] をクリックします。

Kali Linux > デスクトップ

Kali Linux のデスクトップが表示されました。

とりあえず正常にインストールできているようです。

インストール直後の状態の確認

ターミナルで確認します。

$ cat /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

$ cat /etc/timezone
Asia/Tokyo

$ cat /etc/default/keyboard
XKBMODEL="pc105"
XKBLAYOUT="jp"

$ cat /etc/hosts           
127.0.1.1       m1-kali

$ hostname
m1-kali

$ domainname -d


$ cat /etc/passwd | grep capybara
capybara:x:1000:1000:capybara,,,:/home/capybara:/usr/bin/zsh

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=13.7 ms

あとがき

OS の初期設定

インストールが完了したので、このあと以下のような作業をする予定です。(解説する予定なし)

  • パッケージの更新
    • sudo apt update
    • sudo apt upgrade
  • SSH Server の自動起動設定
  • 日本語のローマ字入力の設定

失敗談

最初、間違えて”Apple Silicon (ARM64)” のイメージファイルではなく、”Pre-built Virtual Machines” の方にあるVMware 向けの仮想マシンのパッケージファイルをダウンロードして、仮想マシンを作り起動するとStart PXE over IPv4 というエラーになり原因を調べても分からず時間を浪費するという状況に陥ってしまいました。

同じ状況に陥った人がStart PXE over IPv4 をキーワードで検索し、このページに辿り着いて早期解決ができたら幸いです。

VirtualBox(M1 Mac)にKali Linuxのインストールを試みた結果

VirtualBox のApple Silicon 対応は、VirtualBox 7.0.8 BETA (Developer preview for macOS / Arm64 (M1/M2) hosts) が2023.6.18時点で提供されていますが、”Apple Silicon (ARM64)” のイメージファイルを使ったインストールを試したところ失敗しました。(”Linux 2.6/3.x/4.x/5.x/(64-bit)”、”Debian 11 Bullseye(64-bit)”)

VirtualBox > Kali Linux > Installation failed
VirtualBox でKali Linux のISOファイルを起動するとすぐ表示されるメッセージ

参照

M1 MacにVMware Fusionをインストール

M1 Mac にVMware 社が提供するMac 用デスクトップ ハイパーバイザーのVMware Fusion をインストールする手順の解説です。

VMware Fusion について

VMware Fusion はVMware 社が提供するソフトウェアで、macOS にインストールすることで、macOS 上でWindows やLinux などのOS を仮想マシンとして起動させることができるようになります。

仮想化ソフトウェアは、ホスト型、ハイパーバイザ型、コンテナ型の3つに分類分けされますが、VMware Fusion はホストOS(macOS)上で動作し、その上で仮想マシンを作成・実行するのでホスト型に分類されます。

現在の最新のバージョンであるFusion 13 のシステム要件は以下のようになっています。

  • プロセッサ(Intel プロセッサー、Apple Silicon
  • OS(macOS 12 Monterey、13 Ventura)

VMware Fusion は、Fusion Pro とFusion Player の2種類があります。
Pro はビジネル利用、Player はゲームや学習目的での利用を想定していて、備えている機能が異なっています。

Pro とPlayer はともに有償の商用利用ライセンスとして提供されていますが、Player は非商用目的の個人利用ライセンスに登録することで無償で使用することが可能となっています。

手順

今回解説する手順は、VMware Fusion Player の個人利用ライセンスの登録からインストール、初回起動までの手順になります。

なお、使ったMac はM1 Pro チップMacBook Pro 、OSはmacOS Monterey です。

1. アカウント登録

VMware のサイトにアクセスします。

VMware ダウンロード 1

上のメニューの[製品] をクリックし、”デスクトップハイパーバイザー” の[Mac 用のFusion] をクリックします。

VMware ダウンロード 2

[無償評価] をクリックします。

VMware ダウンロード 3

“Fusion 13 Player (macOS 12 以降)” の[個人利用ライセンスの登録 >] をクリックします。

VMware ダウンロード 4

Customer Connect のページが表示されます。
“Installation & Configuration” というタブが選択された状態になっています。

右上の[Create an Account] をクリックします。

VMware ダウンロード 5

アカウントの情報を登録するRegister のページが表示されます。
以下の情報を入力し、利用規約のチェックをON 、商品・サービスの案内を受け取るかどうかのチェックを希望する場合はON にして、[Register] をクリックします。

  • 登録するアカウントのログイン情報(Email address, Password)
  • ユーザー情報(First name, Last name)
  • 所属企業の情報(社名、役職、住所、郵便番号、国、電話番号)
VMware ダウンロード 6

登録したメールアドレスに6桁のワンタイムパスワードが届くので、画面に入力して[Verify Code] をクリックします。

VMware ダウンロード 4

アクティベートされたと表示された後、自動で元のページ(Customer Connect の最初のページ)に戻るので、右上の[I Have an Account] をクリックします。

VMware ダウンロード 7

ログイン画面が表示されるので、メールアドレスとパスワードを入力し、[Sign In] をクリックします。

2. ダウンロード

ログインが成功すると、Customer Connect のページが表示されます。
“License & Download” タブが選択された状態になっています。

VMware ダウンロード 8

“License Information” に、VMware Fusion Player 13 – Personal Useライセンスキーが表示されています。後でVMware Fusion の初回起動時に入力するので控えておきます。

“Download Packages” に、VMware Fusion Player – Personal Use License – Binaries の[Manually Download] ボタンがあるのでクリックしてdmg ファイルをダウンロードします。

5月15日の時点では「VMware-Fusion-13.0.2-21581413_universal.dmg」というファイルがダウンロードされました。

ダウンロードしたファイルに破損などがないか、チェックサムを確認します。

% shasum -a 256 VMware-Fusion-13.0.2-21581413_universal.dmg
c86b40823b97334f20b4e6b475b488ec23faf06c986e291965b9e56f7b44c042 VMware-Fusion-13.0.2-21581413_universal.dmg

ターミナルで上記コマンドを実行して出力された文字列と、画面に表示されているSHA256SUM の文字列が一致しているか確認します。

3. VMware Fusion のインストール

ダウンロードしたdmg ファイルをダブルクリックします。
以下のウィンドウが表示されます。

VMware Fusion インストール 1

“VMware Fusion.app” のアイコンをダブルクリックします。

VMware Fusion インストール 2

エンドユーザー使用許諾書を確認し、[同意する] をクリックします。

VMware Fusion インストール 3

VMware Fusion 13 のライセンスキーを持っています” が選択された状態で、前述の手順で控えておいたライセンスキーを入力して[続ける] をクリックします。

VMware Fusion インストール 4

ご利用ありがとうございます” の画面が表示されたら[完了] をクリックします。

VMware Fusion のインストールはこれで完了です。

4. VMware Fusion の初回起動

続けて、インストールしたVMware Fusion を起動します。

VMware Fusion アイコン

Launchpad のVMware Fusion アイコンをダブルクリックします。

VMware Fusion 初回起動 5

アクセシビリティにアクセスできません” というメッセージが表示されるので[OK] をクリックします。

システム環境設定を開き、プライバシーのアクセシビリティを開きます。

VMware Fusion 初回起動 2
VMware Fusion 初回起動 3

VMware Fusion.app” のチェックがOFF になっているのでON にします。

VMware Fusion 初回起動 4

VMware Fusion.app が SystemEvents.app を制御するアクセスを要求しています” というメッセージが表示されていたら、[OK] をクリックします。

VMware Fusion 初回起動 5

“インストール方法を選択” という画面が表示されました。
VMware Fusion の初回起動はこれで完了です。

この画面から、ISO ファイルを使ったOS のインストールや、仮想ディスクのファイル(.vmdk)を使った仮想マシンの作成をすることができます。

あとがき

あとでライセンスキーを確認したくなった時に、VMware Customer Connect のライセンスキーが表示されているページを見つけづらそうだったので記載しておきます。

  1. VMware Customer Connect にログインする
    • https://customerconnect.vmware.com/home
  2. 右上の9点リーダーから”Trial and Free Products” をクリック
  3. “VMWare Fusion” の”Get Fusion Player for Free” をクリック
  4. “VMware Fusion Player – Personal Use License” のページが表示される

次回、VMware FusionKali Linux の仮想マシンをインストールする手順を解説する予定です。
2023.6.18 に投稿しました(↓)

参照

M1のmacOSにJDKをインストール

はじめに

久しぶりにJava を触ることになり、M1macOSJDK をインストールしたのでその記録です。

JDK は種類が色々あり、どれを入れようか悩んだ結果、AzulOpenJDK をインストールすることにしました。

選定理由は、M1 のmacOS で動作すればよく、あまりガッツリ調べずに決めたので書かないでおきます。
とはいえ、振り返りができるように参考になったサイトのリンクを貼っておきます。

Azul のOpenJDK は、Homebrew にパッケージがありましたが、最新のJava 20 しかなかったので、Azul の公式サイトから最新のLTS であるJava 17 をダウンロードしてインストールすることにしました。

  • zulu – Homebrew Formulae

ダウンロード

Azul の公式サイトのダウンロードページにアクセスします。

左のAzul Zulu Builds of OpenJDK のDownload ボタンをクリックして、希望のJava 17 (最新のLTS)、macOS M1/M2 のdmg ファイルをダウンロードできます。

また、下にスクロールすると、各バージョン、OS環境、CPUアーキテクチャを選ぶことができるようになっています。

ここでは、Download ボタンをクリックすると、macOS 向けでは.dmg / .tar.gz / .zip のいずれかを選んでダウンロードできるようになっています。

今回はmacOS、ARM 64-bit v8.dmg を選択して、下記のファイルをダウンロードしました。

  • zulu17.42.19-ca-jdk17.0.7-macosx_aarch64.dmg

ダウンロードが完了すると表示される画面にSha-256 checksum のリンクがあるのでクリックして、SHA256 のチェックサムを表示します。

ダウンロードしたdmg ファイルに対して下記のコマンドでSHA256 チェックサムを算出し、表示されていたチェックサムと一致していることを確認します。

% openssl sha256 zulu17.42.19-ca-jdk17.0.7-macosx_aarch64.dmg
SHA256(zulu17.42.19-ca-jdk17.0.7-macosx_aarch64.dmg)= 984face81db25020ace7f68fbf4d2c1ec950b46f34c1d40adc36983e545205c5

インストール

dmg ファイルをダブルクリックしてインストールします。

右のダンボールをダブルクリックします。

指示に従えばインストールは完了します。(特筆することがないので省略)

簡単な動作確認だけしておきます。
バージョンを確認します。

% java -version
openjdk version "17.0.7" 2023-04-18 LTS
OpenJDK Runtime Environment Zulu17.42+19-CA (build 17.0.7+7-LTS)
OpenJDK 64-Bit Server VM Zulu17.42+19-CA (build 17.0.7+7-LTS, mixed mode, sharing)

Azul OpenJDK のインストール先を確認します。

% ls -l /Library/Java/JavaVirtualMachines/
total 0
drwxr-xr-x  3 root  wheel  96  5 26 21:54 zulu-17.jdk

あとがき

IDE は最近使っているVisual Studio Code のExtension Pack for Java がよさそうなのでチャレンジしてみようと思います。
Eclipse が一番よく使っていましたが、あまりにも長く使っていないので、思い出すのに苦労するくらいなら新しいものを使ってみようという感じです。

久しぶりの投稿でしたので、とてもシンプルなものになりました。
リハビリとして単なる作業記録を書いた感じです。

参照

Macのssh-agent

Macssh-agentキーチェーンとの連携ができるので、上手く使いこなすと便利そうですが、仕組みがあまりよく分からないで使うのも気持ち悪かったので整理してみました。

はじめに

1. ssh-agentについて

  • OpenSSH の認証エージェント
  • macOS はLeopard から標準インストールされている
  • SSH の公開鍵認証で使う秘密鍵をssh-agent に登録すると、サーバにSSH で接続する際のパスフレーズの手入力を省略できる(ssh-agent が代理でパスコードを入力してくれる)
  • OS をシステム終了するとssh-agent の登録情報が削除されるので、OS を起動する度に再登録が必要

2. キーチェーンの役割について

  • SSH の公開鍵認証で使う秘密鍵のパスコードをキーチェーンに登録すると、登録した秘密鍵をパスコード付きでssh-agent に読み込むことができる
  • キーチェーンには秘密鍵のパスフレーズが保存される(秘密鍵自体は保存されないので、キーチェーンから秘密鍵の復元はできない)

環境について

クライアント側の環境

  • macOS Monterey

サーバ側の環境

  • Ubuntu 20.04.4 LTS

準備

1. SSHの公開鍵認証で使う鍵の作成

今回、鍵の形式はEd25519 で作成します。
作成する際にパスフレーズの入力を求められるので、任意の文字列を指定します。

ssh-keygen -t ed25519
→ パスフレーズを入力する
ls -l ~/.ssh/
→ ~/.ssh/に秘密鍵「id_ed25519」と公開鍵「id_ed25519.pub」が格納されている
  • id_ed25519
    • クライアント側で署名に使う秘密鍵
  • id_ed25519.pub
    • サーバ側で検証に使う公開鍵

2. 接続先のサーバに公開鍵を登録

下記のコマンドで指定したサーバ・ユーザの ~/.ssh/authorized_keys に公開鍵を登録します。

ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]

※ サーバ「test.example」の「/home/ubuntu/.ssh/authorized_keys」に登録されます

3. 接続確認

SSH の公開鍵認証でサーバに接続できるか確認します。

ssh -i ~/.ssh/id_ed25519 [email protected]
→ パスフレーズを入力して接続に成功
exit

ちなみに、オプション-i で秘密鍵を指定しなくても同じ様に接続できました。

ここまでは、ssh-agent を使わないSSH の公開鍵認証です。

ssh-agentを使う

ssh-agent に秘密鍵を登録してSSH の公開鍵認証でサーバに接続します。

1. 秘密鍵をssh-agentに登録

ssh-add ~/.ssh/id_ed25519
→ パスフレーズを入力して登録する

ちなみに、秘密鍵を指定しなくても同じ様に登録できました。
その場合、~/.ssh/ に複数の秘密鍵のファイルがあると、全ての秘密鍵のパスフレーズの入力を求められ登録しようとします。

2. 秘密鍵がssh-agentに登録されていることを確認

ssh-add -l
→ 登録されている秘密鍵に対応する公開鍵のフィンガープリントが表示される

3. 接続確認

パスフレーズを入力しないでサーバに接続できるか確認します。

ssh -i ~/.ssh/id_ed25519 [email protected]
→ パスフレーズの入力を求められずに接続に成功
exit

パスフレーズを入力しないで接続できたということは、ssh-agent が代理でパスフレーズを入力してくれたということになります。

続けて、オプション-i で秘密鍵を指定しないで接続できるか確認します。

ssh [email protected]
→ パスフレーズの入力を求められずに接続に成功
exit

こちらも同じ様にパスフレーズを入力しないで接続できました。

以降、パソコンのシステムを終了するまでパスフレーズの入力が求められなくなるので、便利ではありますがパスフレーズを知らない第三者もこのコマンドを入力するだけでサーバにSSH 接続できてしまうので、離席する際はパソコンをロックする等の運用上の配慮が必要になります。

キーチェーンを使う

秘密鍵のパスフレーズをキーチェーンに登録し、登録したキーチェーンのパスフレーズをssh-agent に読み込んでSSH の公開鍵認証でサーバに接続します。

1. 秘密鍵のパスフレーズをキーチェーンに登録

ssh-add --apple-use-keychain ~/.ssh/id_ed25519
→ パスフレーズを入力して登録する
  • オプション-K非推奨となり、替わりに–apple-use-keychain が用意されていました
  • 引数の秘密鍵の指定を省略すると、~/.ssh/ に格納されている全ての秘密鍵の登録を試みます(各鍵のパスフレーズを聞かれるので、入力して正しければ登録されます)
  • 上記のコマンドを実行すると、ssh-agent にも秘密鍵が登録されました

2. キーチェーンに登録されていることを確認

キーチェーンアクセスで秘密鍵のパスフレーズがキーチェーンに登録されていることを確認します。

キーチェーンアクセスを開き、右上の検索窓に”SSH” と入力して一覧の表示を絞り込むと、登録した秘密鍵が表示されます。

キーチェーンアクセス(一覧)
キーチェーンアクセス(一覧)

一覧の秘密鍵の行をクリックして詳細画面を開き、[パスワードを表示] のチェックをONにすると秘密鍵のパスフレーズが表示されます。

キーチェーンアクセス(詳細)
キーチェーンアクセス(詳細)

3. ssh-agentに登録されている秘密鍵を削除

キーチェーンの秘密鍵をssh-agent に読み込むので、前述「1. 秘密鍵をssh-agentに登録」でssh-agent に登録した秘密鍵を一旦削除します。

ssh-add -D

4. キーチェーンの秘密鍵をssh-agentに読み込む

ssh-add --apple-load-keychain ~/.ssh/id_ed25519
  • オプション-A非推奨となり、替わりに–apple-load-keychain が用意されていました
  • 引数の秘密鍵の指定を省略すると、キーチェーンの全ての秘密鍵がssh-agent に読み込まれます(パスフレーズの入力が求められずに読み込まれます)

5. 秘密鍵がssh-agentに登録されていることを確認

ssh-add -l
→ 登録されている秘密鍵に対応する公開鍵のフィンガープリントが表示される

6. 接続確認

パスフレーズを入力しないでサーバに接続できるか確認します。

ssh [email protected]
→ パスフレーズの入力を求められずに接続に成功
exit

設定

~/.ssh/config

任意でssh-agent に関係する下記のオプションを指定することができます。

Host *
 AddKeysToAgent yes
 UseKeyChain yes
  • AddKeysToAgent
    • サーバにSSHで接続した際に、秘密鍵をssh-agentに登録する設定
    • yes:登録する、no:登録しない(デフォルト)、他にconfirmとaskが指定できる
    • yesにすると、ssh-add を実行する必要がなくなる
  • UseKeyChain
    • サーバにSSHで接続した際に、秘密鍵をキーチェーンに登録する設定
    • yes:登録する、no:登録しない(デフォルト)
    • yesにすると、ssh-add –apple-use-keychain を実行する必要がなくなる

どう使うか

秘密鍵のパスフレーズをキーチェーンで管理して使う

以下の手順でssh-agent を使う

  1. 公開鍵認証で使う鍵を作ったタイミングで秘密鍵をキーチェーンに登録する
    • ssh-add –apple-use-keychain ~/.ssh/id_ed25519パスコードを入力
  2. SSH でサーバに接続する前にキーチェーンの秘密鍵をssh-agent に登録する
    • ssh-add –apple-load-keychain
  3. SSH でサーバに接続する

OS を起動する度に2.を実行する必要がありますが、普段はパスコードの手入力が必要なくなるというのが利点としてあります。
非推奨になったオプション-A に比べると–apple-load-keychain が覚えづらいのが残念な感じです。
この使い方であれば、config の設定は必要なさそうです。

秘密鍵のパスフレーズをキーチェーンで管理しないで使う(configの設定なし)

以下の手順でssh-agent を使う

  1. SSH でサーバに接続する前に秘密鍵をssh-agent に登録する
    • ssh-addパスコードを入力
  2. SSHでサーバに接続する

OS を起動する度にパスコードの手入力が必要なので、パスコードの運用が雑になりそうです。
普段からssh-add コマンドを使うのでssh-agent を意識するシンプルな使い方という感じです。

秘密鍵のパスフレーズをキーチェーンで管理しないで使う(configの設定あり)

以下の手順でssh-agent を使う

  1. config にSSH 接続の際に秘密鍵をssh-agent に登録する設定をする
    • AddKeysToAgent yes
  2. SSH でサーバに接続する(OS 起動後の初回)
  3. SSH でサーバに接続する(2回目以降)

OS を起動する度にパスコードの入力が必要なので、パスコードの運用が雑になりそうです。
普段は ssh コマンドだけを使えばよくなるので、ssh-agent を意識しなくなりそうです。

あとがき

Macssh-agentについて整理できたようで整理できていない感じですが、どう使うかの選択肢は整理できたと思います。
最後に感想とメモのようなものを書き残しておきます。

  • ssh-add のキーチェーンを扱うオプションについて
    • macOS Monterey で-K と-A が非推奨になったらしい
    • 新しい–apple-use-keychain と–apple-load-keychain 覚えづらい
  • config のUseKeyChain について
    • 秘密鍵は基本的に意識して扱いたいので、無意識で永続的に保存される仕組みは使いたくない(sshコマンドの実行でキーチェーンに登録したくない)
  • キーチェーンに登録するのは秘密鍵の保存場所とパスコードの情報
    • ~/.ssh/ の秘密鍵を削除するとキーチェーンに登録されている情報はゴミになる
    • キーチェーンから秘密鍵を復元できない
  • ssh-agent を使わないという選択
    • 離席する際のパソコンのロックが徹底できないのであれば使わない方がよい
    • ssh-agent はあくまでも利便性を向上させるツールなので無理して使うことはない
  • 秘密鍵のパスコードを絶対第三者に使われたくない
    • パスコードをキーチェーンで管理すれば、ウェブサイト向けのパスワードマネージャー(1Passwordなど)のような感覚でパスコードをセキュアに扱うことができる
  • ssh-agent のプロセス起動
    • OS を起動した状態ではssh-agent が起動していない
    • ssh コマンドやssh-add コマンドを実行するとssh-agent が起動する(ps aux | grep ssh-agent で確認)
  • シェル起動時にssh-agent に登録する
    • キーチェーンに登録して、~/.zshrc にssh-add –apple-load-keychain を記述する
    • ssh コマンドでパスフレーズの入力を求められずに接続できる
    • 普段ssh-agent とパスフレーズを全く意識する必要がなくなり利便性はmax

参考