wslにsshサーバーを立ててプライベートネットワークの他のPCから入る

windows11のアプデでPCがまともに起動しなくなったので色々やり直した。
毎回やり方わからなくなるので、自分用にメモ。
・ホストマシンが起動したら自動でsshサーバ立ち上げてくれて、
・ローカルマシンはssh/config設定した内容&鍵認証で入るだけ、
を目指す。

途中までホスト側で作業、最後の鍵登録でクライアント側に移る。


やったことは以下

ホスト側

wslのインストール

docs.microsoft.com
いつから変わったのか、ここにあるようにコマンドプロンプトなどで "wsl --install" と入力するだけでwsl(Ubuntu)を入れてくれました。らくちん。

VScodeのインストール

azure.microsoft.com
(どのページから行ったか忘れたけど)公式ページから入れるだけ。

wsl側のshスクリプト作成(wslのIPアドレス取得、ポートフォワードの設定)

参考
wsl2でsshサーバを起動し、外部からそこに接続 #Linux - Qiita


スクリプト

#!/bin/bash

IP=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')

netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add    v4tov4 listenport=22 connectaddress=$IP

sc.exe config iphlpsvc start=auto
sc.exe start  iphlpsvc

ifconfigがないと言われたので入れる
wsl

Command 'ifconfig' not found, but can be installed with:

sudo apt install net-tools


ポートフォワーディングの確認コマンド
コマンドプロンプト

netsh.exe interface portproxy show v4tov4

windows側のbatファイル作成(上記shの呼び出し、sshサーバ起動を行う)

batファイル

wsl --exec bash /home/port_fowarding_22.sh
wsl -u root --exec sudo service ssh restart

windowsファイアウォールの設定

出展忘れた。
sshのポートに対して、プライベートやパブリックどのネットワークから接続できるようにするか設定する。


ルーターの設定

ポート開放。
使っている機器の説明を参照。


タスクスケジューラでPC起動時にポートフォワーディング&サーバー起動

tkyonezu.com


公開鍵の登録の準備

まずパスワード認証を許可する(あとで戻す)
wsl

sudo vi /etc/ssh/sshd_config


PasswordAuthentication no
にする。
viの操作は
・"i"で編集モード?に変更
・該当箇所を編集
・"Esc"で編集モードを抜ける
・":wq"で保存(w)と終了(q)


もしなければ mkdir ~/.ssh しておく
ここでクライアント側の操作に移る。
鍵の登録が終わったら、先ほどと同じ手順でパスワード認証をnoに戻す

サーバー起動

wsl

sudo service ssh restart

このときに(もしくは前の手順だったかも)、鍵のファイルのpermissionがどうのこうのとエラーが出たら、
それに従って設定を変更する。
chmod +x ~~~
で行けたはず。



クライアント側

鍵生成

https://linuxfan.info/ssh-ed25519
ssh-keygenコマンドで作成できる。

  • t オプションで鍵の種類(暗号化のアルゴ)を指定できる。

指定しなくてもできるが、Ed25519が良いみたいな話をよく見るのでそれで作成した。

ssh-keygen -t ed25519

鍵登録

参考
qiita.com
色々方法はあるが、ssh-copy-idコマンドを使う

コマンドプロンプト

ssh-copy-id -i ($公開鍵のパス) ($接続先のアカウント名)@($接続先アドレス)


もしくはscpコマンド
SSHの鍵認証設定 #ssh公開鍵認証 - Qiita
scpでコピーしたあと、ホスト側でauthorized_keyに追加する必要がある。




追記 2023/10/31
いつからかPC起動時にsshサーバが自動起動しなくなっていた。
wslで

sudo service ssh restart

すれば起動するのでポートフォワードとかは生きているっぽい。
どこかのWindowsUpdateとかでタスクスケジューラが何か変になったとか?あとでなおす。