のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

wsl2にsshで接続する

概要

ホストOS
      |(ssh 接続)
ゲストOS(wsl2,ubuntu20.04)

通常はホストOS側でwsl2がインストール完了していれば、wsl -d Ubuntu20.04のようにコマンドを叩けば、一般的なsshと同様な感覚でログインシェルに接続できる。 なので本来この作業は意味がない(ゲスト-ホスト間のファイル転送もwslからみると/mnt/c/以下にホストOSのシステムドライブがマウントされているため、容易にアクセスができるため)

今後wsl2のUbuntuサーバーにホストOSが所属するLAN内のPCから直接wsl2のゲストサーバーに接続することを目指して、まずは前段階の準備として一般的なssh接続導入の準備をする。 なお以降ゲストOSのことはwsl2サーバーと記載する。

wsl2サーバーへログイン

Windows Powershell からwsl2コマンドを実行してログインする。 わからない場合は--listオプションをつけてインストール済みのディストーションを探す。

$ wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
docker-desktop
docker-desktop-data

$ wsl -d Ubuntu
// ログインシェルへ

wsl2サーバーでのsshサーバーの導入

$ sudo apt install -y openssh-server

自分の場合は導入済みだった。(おそらくwslコマンド自体がssh接続のラッパーだからだと思う、調べてはいない)

sshd_configの編集

以下の記述を編集(コメントアウトをはずす)

$ sudo vi /etc/ssh/sshd_config

//sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
PasswordAuthentication no

編集が終わったら、sshサーバーを再起動する。

$ sudo service ssh restart
$ sudo service ssh status
 * sshd is running

statusを確認してrunningとなっていればsshサーバーの準備は完了

ホスト側公開鍵の仕込み

おそらく以下でいけるはず

// wslサーバ側で操作
$ cat /mnt/c/Users/t-kod/.ssh/ssh_key.pub > .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

これでゲストOS側の準備は整った。 $exitで切断して、ホストOSで操作をする。

ssh_config作成

wsl2ではPC(wsl2)の再起動のたびにIPアドレスが動的に変化する。 これについてはスクリプトで動的にconfigを編集したいが、今回はとりあえず接続だけの確認をする。

// wslのIPアドレスを確認
$ wsl -d Ubuntu --exec ip address 
// eth0のinetを確認
$ touch .ssh/config
Host wsl-ubuntu
 Hostname <今確認したIPアドレス>
 User ubuntu
 Port 22
 IdentityFile ~/.ssh/ssh_key
 IdentitiesOnly yes

これで準備完了。

$ ssh wsl-ubuntu 
// wslサーバへ接続

その他

近いうちにほかサーバとのssh接続については別途試して記事化予定