Mac 上のVirtual Box のUbuntu にSSH でアクセスしX転送する

開発環境

Virtual Box 上のUbuntu へ、Mac のターミナルからSSH アクセス & X転送を行えるようにします。

ホストオンリーアダプタの作成

Virtual Box のファイル -> ホストネットワークマネージャをクリックすると、以下のような画面が現れる

作成をクリックし、ホストオンリーアダプタを作成する

プロパティをクリックすると、IPアドレスの情報が確認可能

IPv4 アドレスを抑えておく: 今回は192.168.56.1

ネットワークアダプタの有効化

Virtual Box の設定をクリックし、ネットワーク -> アダプター2 を選択

ネットワークアダプタを有効化し、割当をホストオンリーアダプタに設定

名前は先程作成したホストオンリーアダプタを選択する

Ubuntu のIPアドレスを固定

Virtual Box の起動ボタンをクリックし、Ubuntu を起動する
起動後、ログイン

以下のコマンドで、Ubuntu から見えるネットワークアダプタを確認

先程アダプター2にホストオンリーアダプタを設定したので、3: eth0s8 が存在することを確認

$ ip address
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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:13:86:65 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.13/24 brd 192.168.11.255 scope global dynamic enp0s3
       valid_lft 172776sec preferred_lft 172776sec
    inet6 fe80::a00:27ff:fe13:8665/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:80:bd:73 brd ff:ff:ff:ff:ff:ff

Ubuntu 18.04 の場合は、yaml ファイルを編集する必要がある

下記コマンドで編集を行う

$ sudo vim /etc/netplan/50-cloud-init.yaml 

vim コマンドの使用方法については下記を参照

知識0から始めるVim講座 – Qiita

以下のように設定する

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            dhcp4: true
        enp0s8:
            addresses: [192.168.56.2/24]
            nameservers:
               addresses: [192.168.56.1]
    version: 2

nameservers のaddresses にはホストオンリーアダプタ設定時に抑えたIPv4 アドレスを設定: 今回は192.168.56.1

その上のaddresses にはその値よりも一つ大きい値を設定: 今回は192.168.56.2/24

編集完了後、下記コマンドにて設定の適用を実施

$ sudo netplan apply

最後に下記のコマンドで3: enp0s8 にinet が割り振られていることを確認できればOK

$ ip address
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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:13:86:65 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.13/24 brd 192.168.11.255 scope global dynamic enp0s3
       valid_lft 172776sec preferred_lft 172776sec
    inet6 fe80::a00:27ff:fe13:8665/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:80:bd:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.2/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe80:bd73/64 scope link 
       valid_lft forever preferred_lft forever

SSH 接続をテスト

Mac のターミナルからUbuntu へのSSH 接続を試みる

下記コマンドにて接続する

  • <user> にはUbuntu で作成したユーザー名
  • <ip> には先程設定した固定IP アドレス: 今回は192.168.56.2
$ ssh <user>@<ip>

接続に成功するとアカウントのパスワード入力を求められる

適切なパスワードを入力しログインが成功すればOK

SSH を公開鍵認証に変更

パスワードによるログインから公開鍵認証に切り替える

SSH でログインしたUbuntu 上で公開鍵と秘密鍵を生成する

  • 公開鍵: Virtual Box のUbuntu に登録する鍵
  • 秘密鍵: Mac に登録する鍵

公開鍵と秘密鍵の生成のため、Ubuntu 上で下記コマンドを実行

$ ssh-keygen

デフォルトでは以下のディレクトリに作成される

  • id_rsa: 秘密鍵
  • id_rsa.pub: 公開鍵
$ ls -l ~/.ssh/
total 8
-rw------- 1 ask ask 1675 Jun 30 05:21 id_rsa
-rw-r--r-- 1 ask ask  399 Jun 30 05:21 id_rsa.pub

公開鍵をUbuntu で使用するため、下記コマンドを実行

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Ubuntu 上での最後の作業として、パーミッションの設定を行う

$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh/

SSH接続を終了し、Mac のターミナルに戻る

下記コマンドを実行し、秘密鍵をUbuntu からMac へコピー

  • <user> にはUbuntu で作成したユーザー名
  • <ip> にはUbunt に設定した固定IP アドレス: 今回は192.168.56.2
$ scp <user>@<ip>:~/.ssh/id_rsa ~/.ssh/

Ubuntu と同様にパーミッションの設定を行う

$ chmod 600 ~/.ssh/id_rsa
$ chmod 700 ~/.ssh/

以上で公開鍵認証の準備が完了

確認のため下記コマンドを実行し、パスワードの入力なしでアクセスできればOK

$ ssh <user>@<ip>
Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-54-generic x86_64)

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

  System information as of Sun Jun 30 05:42:56 UTC 2019

  System load:  0.0               Processes:             101
  Usage of /:   9.2% of 62.74GB   Users logged in:       1
  Memory usage: 4%                IP address for enp0s3: 10.0.2.15
  Swap usage:   0%                IP address for enp0s8: 192.168.56.2


138 packages can be updated.
64 updates are security updates.


Last login: Sun Jun 30 05:13:44 2019 from 192.168.56.1

SSH でX転送ができることを確認

Mac にX転送用のアプリケーションをインストールする

Mac のターミナルで下記コマンドを実行

$ brew update
$ brew cask install xquartz

インストール完了後、Mac を再起動

再起動後、SSH にてアクセス

-Xオプションを付与した下記コマンドにてアクセス

$ ssh -X <user>@<ip>

2020/08/14 追記
自分の環境では、-Xオプションが正常に動作しなくなった
そのため、以下のように-Yオプションを付与して対応している

$ ssh -Y <user>@<ip>

この時点でX転送の準備は完了しているはず

Ubuntu 上で下記コマンドにてxeys をインストール, 実行し、確認する

$ sudo apt update
$ sudo apt install x11-apps
$ xeyes

以下のようなウインドウが表示されればOK