WSL2(Debian) + Windows TerminalでSSH接続をする
記念すべき初回投稿! 忘れそうなので、WSL2でのSSH接続セットアップについてメモを残しておこう🤔
※本記事は2023.04.21現在時点のものです。詳しくは各公式ドキュメントを参照ください。
今回の構成
- Windows 11 Pro (22H2)
- WSL2 - Debian 11.6
前提条件
- WSL2 と Debianがインストールされていること
- cp,scp,標準入出力,リダイレクトを理解していること
1. SSHサーバのインストール - WSL2 (Debian)側
Debianインストール時にSSHサーバをインストールしてなければ、Debian(Linux)で以下コマンド実行する
$ sudo apt -y install ssh
ちゃんとインストールできたか?念のため確認
$ sudo apt list --installed | grep openssh-server
インストールできていれば、下記のように表示されるはず
openssh-server/stable,now 1:8.4p1-5+deb11u1 amd64 [installed]
2. SSHサービスの状態を確認
Windows Terminal上でSSH接続[username]@[ipアドレス]しようとして、接続拒否エラー(connection refused
)が出たら、サーバのSSHが非アクティブ状態なので、以下のコマンドを実行する
$ sudo service ssh status
もし、sshd is running
でなかったら、下記コマンドで起動する
$ sudo service ssh start
リスタート(再起動)でもOK
$ sudo service ssh restart
まだ接続拒否エラーが続く場合
SSHのリスニングポートを確認してみる
以下コマンドで、netstatをインストール
$ sudo apt -y install net-tools
インストール後、下記コマンドでOpenSSHサーバがどのポートをリッスンしているか確認する
$ sudo netstat -ltnp | grep sshd
↓結果 (下記は、Port番号に[9999を設定した場合])
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 845/sshd: /usr/sbin tcp6 0 0 :::9999 :::* LISTEN 845/sshd: /usr/sbin
2. PowerShell(Windows Terminal)側の設定
- Windows公式ページ通りにやれば簡単 ※基本、「管理者として実行」
PowerShellを使用してOpenSSHをインストール
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
インストールしたら、とにかく起動
# SSHサービス起動! > Start-Service sshd
DebianのOpenSSHサーバーに接続!
> ssh username@servername # servernameはLinuxのIPアドレス <= Debian側で `$ ip a` でIPアドレスは確認できる。
※【参考】Debianで$ ip a
を入力した結果(一部)
# ip a 入力後、いっぱい画面に出てくるが、eth0のinet = IPv4にIPアドレスがある。 6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:00:0x:xx:x0:00 brd ff:ff:ff:ff:ff:ff inet xxx.xx.xxx.xxx/00 brd xxx.xx.xxx.xxx scope global eth0 valid_lft forever preferred_lft forever inet6 xx00::000:0xxx:xxxx:x000/00 scope link valid_lft forever preferred_lft forever
> ssh username@servername
で接続したら、下記メッセージ。yesを入力する。
The authenticity of host 'servername (10.00.00.001)' can't be established. ECDSA key fingerprint is SHA256:(<a large string>). Are you sure you want to continue connecting (yes/no)?
3. キーを作る(Windows側)
公式マニュアルの「キーベースの認証」を見ながら行う。
Windows側のSSHサービスを再起動ごとに自動開始
Get-Service -Name sshd | Set-Service -StartupType Automatic
キーを作る
一言一句、公式マニュアル - ユーザー キーの生成 通りに進める。
公開鍵をサーバーにコピーする
PowerShellから公開鍵をサーバへコピーする
> type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh ubichinon@xxx.x.x.xx "cat >> .ssh/authorized_keys"
WSL2でLinux~Windows間のファイルのやり取りができるから、Debian(Linux)からコピーするのでもいいと思う🤔
# これで大丈夫か? $ cat /mnt/c/Users/ubichinon/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
指定ファイルがミスってたら上書きされるの嫌なので、[>>] 直前に「新しいLinuxの教科書 - p.323 リダイレクトによる上書き」読んでおいてよかった😺 日本語のWindows公式ドキュメントはちょっと古いのでしょうか? 英語版ではscp以外の$ remotePowershellが紹介されてました。やってみましたが、こっちのほうが簡単でした Microsoft公式ドキュメント英語版 - Deploying the public key
4. SSH設定ファイルの編集
# configファイル設定 $ sudo vim /etc/ssh/sshd_config
- #Port 22 + Port 10122 # <= 適当に変更 # rootユーザーでのログインはno PermitRootLogin no # PubkeyAuthenticationはyesへ PubkeyAuthentication yes # パスワード認証を拒否 PasswordAuthentication no # チャレンジレスポンス認証を拒否 ChallengeResponseAuthentication no # PAMを使用する UsePAM yes
:::