Multipassの仮想マシンにssh接続する

公開日:2022/08/09 更新日:2022/08/09
Multipassの仮想マシンにssh接続するのサムネイル

はじめに

Multipass上の仮想マシンにホストマシンからssh接続したい場面があったのでその手順をまとめます。

環境と前提

以下を前提としています。

  • ホストマシンはmacOS
  • Multipassはインストール済みとする

なお、以降の作業は、SSHで仮想マシンやサーバに接続するための一般的な方法であるため、macOSでなくてもWindowsでもLinuxでも基本的に作業は同じだと思います。 Multipassのインストールがまだの場合は、以下にMultipassをmacOSにインストールする手順をまとめています。

virment.com

M1、M1 Pro、M1 MaxなどのApple Siliconを搭載しているMacbookProでの開発環境整備のために、仮想環境を構築できるMultipassをインストールしました。その手順をまとめます。

Mac側で接続用の公開鍵を生成する

macOSのターミナルで以下のようにssh-keygenコマンドを実行して仮想マシンにアクセスするための公開鍵と秘密鍵を作成します。以下ではubuntuvmという名前を公開鍵と秘密鍵につけています。ここは特に指定しなくてもOKです。指定しない場合は、秘密鍵としてid_rsa、公開鍵としてid_rsa.pubが作成されます。

$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mymac/.ssh/id_rsa): ubuntuvm
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ubuntuvm
Your public key has been saved in ubuntuvm.pub
The key fingerprint is:
SHA256:alkdekdjr94d972h4ot8yo24htoU
mymac@mymacnoMacBook-Pro.local
The key's randomart image is:
+---[RSA 4096]----+
|      .          |
|     . + .       |
|     .+ + .      |
|  . =. o .    . .|
|. oD.=  A    o o |
|.++o+ +     o o  |
|.o...+ = . + o . |
|  o+=.C o o o.o  |
|  .o+= O . .o+o  |
+----[SHA256]-----+

生成されたものを確認すると、以下のようにubuntuvmというファイル名の秘密鍵とubuntuvm.pubというファイル名の公開鍵の2つが生成されます。

~/.ssh
$ ls
config known_hosts ubuntuvm ubuntuvm.pub

続いて以下を実行して作成した公開鍵の中身をターミナルに表示します。

$ cat ~/.ssh/ubuntuvm.pub
ssh-rsa AKSJSSSSSJSO...
...省略...
mymac@mymacnoMacBook-Pro.local

上記のようにssh-rsa..から始まる文字列が表示されるので、これを全てそのままコピーしておきます。

Multipassの仮想マシンのauthorized-kyesに追記する

ここからは仮想マシン側での作業になります。 前節までにコピーしたsshの公開鍵の値を以下のように~/.ssh/authorized_kyesにペーストします。

~/.ssh/authorized_kyes
ssh-rsa AKSJSSSSSJSO...
...省略...
mymac@mymacnoMacBook-Pro.local

configに設定する

macOS側の作業になりますが、以下のようにmacの~/.ssh/configに仮想マシンへのSSH接続用の設定を追加しておくと楽になります。以下の中の192.168.64.2はMultipass上で動作するUbuntuのIPアドレスになります。MultipassではデフォルトのUser名がubuntuであるため、以下でもユーザ名としてUser ubuntuとしています。

~/.ssh/config
Host ubuntuvm
  HostName 192.168.64.2
  Port 22
  IdentityFile ~/.ssh/ubuntuvm
  User ubuntu

接続する

あとは~/.ssh/configに設定した内容を使って、以下のようにsshコマンドを実行すればMultipass上のUbuntuにSSH接続できます。以下のsshに続くubuntuvmは、前節で~/.ssh/configに指定したホスト名Host ubuntuvmが該当します。 接続してみると以下のようになります。

$ ssh ubuntuvm
The authenticity of host '192.168.64.2 (192.168.64.2)' can't be established.
ED25519 key fingerprint is SHA256:WuSfOqUaZBplvBvcN4yyE4LNQpaDVZCsPVBrECc03Gw.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.64.2' (ED25519) to the list of known hosts.
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic aarch64)

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

  System information as of Tue Dec 28 01:47:12 JST 2021

  System load:             1.47
  Usage of /:              25.6% of 19.22GB
  Memory usage:            74%
  Swap usage:              0%
  Processes:               140
  Users logged in:         1
  IPv4 address for enp0s1: 192.168.64.2
  IPv6 address for enp0s1: fd16:19b2:f10d:2c06:5054:ff:fe19:bd4b

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

0 updates can be applied immediately.

*** System restart required ***
Last login: Thu Dec 23 02:08:23 2021 from 192.168.64.1
ubuntu@albion:~$

以上で完了です。

まとめ

基本的にはmultipass shellコマンドを使えば十分ですが、直接SSH接続したい場合は上記手順によってホストマシンからMultipass上の仮想マシンへSSH接続することができます。

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。