7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

会社で起動してるWSL Ubuntuに、自宅からSSHでログインしたい。

Last updated at Posted at 2024-05-26

(2024.11.4 追記)WindowsのOpenSSHサーバを利用して接続 > wsl.exe を実行…という方法を @hkuno さんにコメント欄で紹介していただきました。こちらの方法の方がより手軽だと思います。

はじめに

タイトルが何を言ってるのかよくわからんという話ですが、こういう事です。

Linuxを用いたちょっとした事を試したく、身近なLinuxを探してみたが手頃な環境が見つからない。AWSのEC2を起動するのも費用がかかってもったいない。

ということで、お手軽なLinux環境として、会社PCのWindows 10で使ってる、WSLのUbuntuを使うことにしてみました。ついでに自宅の環境からSSHでログインもさせたかったので、その設定も追加してみました。

WSL2の有効化、Ubuntuの利用

WSL2はすでにWindows PCに導入が完了してる前提とします。一応インストール方法書いとくと、wsl --install コマンドで導入します。

[参考] 「WSL を使用して Windows に Linux をインストールする方法
https://learn.microsoft.com/ja-jp/windows/wsl/install

UbuntuにSSHで接続させる

WSL2のUbuntuにSSHで接続することについて

通常、WSLはWindows Terminalを介して、WSLが動くホストPCから使うのが通常の使い方です。ホストOSからSSH接続して使ったり、ましてや外部のマシンから接続させる必要は特にありません。1

したがって、WSL環境にSSHでログインさせたい方は十分なセキュリティ対策を行った上で、これからやろうとすることが自己責任であることを理解しつつ、対応を行ってください。2

WSL2 Ubuntuにてsystemdを使えるようにする

ところで、WSL2はsystemdに対応しており、単体でインストールした通常のLinuxに近い仕組みを持っております。なので、これを有効にします。

vi, nano等のテキストエディタを使って /etc/wsl.conf ファイルを開きます。

$ sudo vi /etc/wsl.conf

以下の内容に編集して保存します。

[boot]
systemd=true
EOF

ホストOS側の、管理者モードで立ち上げたPowerShellに切り替え、wslを一旦シャットダウンします。シャットダウンしたかどうかイマイチわかりづらいですが、応答が戻ればシャットダウンされてます。

wsl --shutdown

その後、Ubuntuを起動。psコマンドを実行し、この時点でWSLのPID 1にsystemdが立ち上がっていればsysytemdが有効になっています。

~$ ps -ae
    PID TTY          TIME CMD
      1 ?        00:03:31 systemd

sshを有効化し、sshサービスを起動する

引き続き WSLのUbuntu にて sshd を使えるようにします。

# systemctlでsshの機能を有効にする
sudo systemctl enable ssh

# sshで利用する秘密鍵等が揃ってないため、用意する
sudo ssh-keygen -A

最低限のセキュリティ対応を行うため /etc/ssh/sshd_config を編集します

$ sudo vi /etc/ssh/sshd_config

#PasswordAuthentication yes のコメントを外して有効にします。

#PasswordAuthentication yes
↓
PasswordAuthentication yes

その後、ssh サービスを起動します。

$ sudo service ssh start

ホストOSからSSHで繋いでみる

この時点でホストOSからSSHで繋いでみましょう。ホストOSから localhost を指定することができるので、sshのコマンドは以下のようになります。3

ssh [wsl username]@localhost

例) ssh ubuntu@localhost

このような反応が戻ってくれば、ホストOSからsshでの接続はできています。

The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:ZdX1KLJws7c8ayPeiRojjH+1jQi9j8Hah5PtNewOZQw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Password: 

自宅から会社PCのWSLにリモートログインしたい

引き続き、このWSLのUbuntu環境に自宅からリモートログインできるようにしてみます。

自宅と会社、ネットワークのセグメントが全く異なりますので、接続するためにはVPSを経由してつなぎます。

今回は、WireGuard技術を用いた簡単VPSツール・Tailscaleを用いてみます。4

Tailscaleのインストール

こちらは導入済みという事で省略します。インストール方法はTailscaleのダウンロードページに簡単に記載されています。

Tailscaleは無料版であるFree Planでも3アカウントまで、合計100台の機器まで登録、接続することができて、なにかと便利です。

ホスト側OSにポートフォワード設定を行う

Tailscaleはインストールを行ったWindows PCに対しネットワーク接続はできます。

しかし、WSL2のOSは仮想ネットワークを介してホストOSと共存しており、通常、ホストOSからWSLネットワークに対し接続することもめんどくさくなってます。5

そこでWSLが動くホストOS側に、外部のネットワークからの接続を行えるよう設定を行います。

WSLのホストOSはWindows側に、SSHのリクエストをWSL側OSに転送するため、管理者モードで立ち上げたPowerShellにポートフォワード設定を行います。

netsh.exe interface portproxy add v4tov4 listenaddress=* listenport=22 connectaddress=[ip_addr_of_wsl2]

Windows側でポートフォワードを起動するにはIP Helperサービスを起動する必要があるため、以下のコマンドも実行します。

sc.exe start  iphlpsvc

ポートフォワード設定がされているか確認するには以下のコマンドを実行します。

netsh.exe interface portproxy show v4tov4

例)
PS C:> netsh.exe interface portproxy show v4tov4

ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               22          172.19.100.182  22

ポートプロキシ設定を削除するには以下のコマンドを入力します。

netsh.exe interface portproxy delete v4tov4 listenaddress=* listenport=22

Tailscaleネットワークにログインする

自宅のPC、WSLが動く会社のPCそれぞれでTailscaleを有効にします。

これにより、100から始まるipアドレスがそれぞれの機器に割り当てられ、Tailscaleネットワークに所属している同士での通信が可能になります。

自宅からSSHコマンドでWSLのUbuntuに繋いでみる

会社のPCの方はWSLで動くOSをWindowsターミナルで動かした状態にしてください。

その後、wslが動く会社のPCのTailscale ipアドレスを指定して

ssh [wsl username]@100.xxx.xxx.xxx

例) ubuntu@100.104.33.41

として接続をしてみます。

% ssh ubuntu@100.104.33.41
Password:

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2 x86_64)

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

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Last login: Sun May 26 12:40:54 2024

ということで自宅のPCから、会社のPCに接続することができました。

WSL側のsshd_configを変更すると、公開鍵認証による接続もできますので、パスワード入力が面倒な方は別途設定してみてください。

  1. macOSがUnix準拠のワークステーションですが、サーバ的な使い方がさほど求められていないのと似た感じですかね。ちょっと前のmacOSだとcron動かすのも面倒くさかった。

  2. これを試して変なことが起きたら、それは試した君自身が悪いのだ、ガハハ…ということです。

  3. このとき、Windowsのご機嫌次第ではlocalhostを指定しても、WSLに通信できない場合もあり、その場合、WSL側のOSでifconfigコマンドを実行し、結果として表示されるネットワークデバイス・eth0に割り当てられたipアドレスを指定してください。

  4. 自宅から会社側の機器と接続できるならVPSの種類は問いません。

  5. これが故に、Windowsのネットワークと変に交じる事もなく使いやすくなってるのですが、まあその辺りは別の話。

7
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?