公開鍵認証を用いたssh接続のすすめ
はじめに
WSL上のubuntuに対して、ホストOS(Windows11)からSSHで接続するまでになります。
OS:Windows11
接続先:ubuntu(WSL)
sshdインストール~パスワード認証でのログインまで
sshで接続できるようにubuntu側で設定します。
sshサーバ(ubuntu)がインストールされているか確認
以下のコマンドを実行してインストールされているか確認します。
# sudo systemctl status ssh
次のように表示された場合は、インストールする必要があります。
Unit ssh.service could not be found.
以下のように表示された場合にはすでにインストールされていますので、次の「sshサーバのインストール」はスキップしてください。
#すでにインストールされていた場合
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-11-08 17:30:55 JST; 49s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1293 (sshd)
Tasks: 1 (limit: 18445)
Memory: 1.8M
CGroup: /system.slice/ssh.service
└─1293 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
sshサーバ(ubuntu)のインストール
not be found.
で見つからないとのことですので、openssh-server
をインストールします。
sudo apt install openssh-server
再度systemctl status ssh
を実行して、以下のように表示されれば、インストール完了です。
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-11-08 17:30:55 JST; 49s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1293 (sshd)
Tasks: 1 (limit: 18445)
Memory: 1.8M
CGroup: /system.slice/ssh.service
└─1293 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
もし、以下のように表示された場合には、sudo apt update
でリポジトリを更新してください。
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/o/openssh/openssh-sftp-server_8.9p1-3ubuntu0.4_amd64.deb 404 Not Found [IP: 185.125.190.83 80]
E: Failed to fetch http://archive.ubuntu.com/ubuntu/pool/main/o/openssh/openssh-server_8.9p1-3ubuntu0.4_amd64.deb 404 Not Found [IP: 185.125.190.83 80]
ここまでで、sshサーバをインストールできたので、windows側で接続できるか確認します。
Windows側でsshの接続確認(パスワード認証)
好みのターミナルソフトでsshで接続してみましょう!!
今回は、標準のpowershellから接続してみました。
# #フォーマット:ssh UserName@IPアドレス
# ssh admin@172.31.66.129
以下のようにプロンプトが更新されて、linuxのコマンドが実行できれば成功です。
# uname -a
Linux DESKTOP-CTSPM2I 5.15.153.1-microsoft-standard-WSL2 #1 SMP Fri Mar 29 23:14:13 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
もし、sshサーバ(ubuntu)側のipアドレスがわからない場合は、ip a
コマンドでIPアドレスを確認して、接続してください。以下、実行例
# ip a
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
inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:ec:fa:fe brd ff:ff:ff:ff:ff:ff
inet 172.31.66.129/20 brd 172.31.79.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:feec:fafe/64 scope link
valid_lft forever preferred_lft forever
公開鍵認証でのログイン
外部公開を行うわけではないので、パスワード認証でもよいのですが、毎度パスワードを入力することは手間になりますので、公開鍵認証でログインできるように行います。
公開鍵の作成
Windows側で認証に使用する公開鍵をコマンドプロンプトで作成します。
ssh-keygen -t ed25519 -C "端末名"
-t
オプションで暗号化方式を指定します。今回は、ed25519を使用します。
-c
オプションでコメントを記載できます。複数の端末を利用する場合、見分けをつけるために記載しておくと便利です。
そのほか、オプションは以下のページを参照ください。
sshサーバ(ubuntu)へ公開鍵のコピー
scpコマンドを用いて、先ほど作成した公開鍵をubuntu側へコピーします。
まず、ubuntu側でコピー先のディレクトリを作成します。
# cd
# mkdir .ssh
# ls -la
ls -la
の実行結果に、.ssh
ができていれば成功です。
次に、以下のコマンドをWindows側で実行します。
# #ユーザ名のフォルダへ移行
# cd ~
# #公開鍵のコピー
# #フォーマット:scp 公開鍵ファイルパス hoge@IPアドレス(ubuntu):/home/ユーザ名/.ssh/
# scp ./.ssh/id_ed25519.pub hoge@172.31.66.129:/home/hoge/.ssh/
ubuntu側で正常にコピーが完了したか確認します。
# ls -la
ls -la
の実行結果に、公開鍵ファイルが格納されていれば正常にコピーできています。
authorized_keysへ公開鍵の登録
公開鍵をauthorized_keysへ登録とパーミッションの変更を行います。
# #フォーマット:cat 公開鍵ファイル >> authorized_keys
# cat id_ed25519.pub >> authorized_keys
# chmod 600 authorized_keys
Windows側でsshの接続確認(公開鍵認証)
# #フォーマット:ssh ユーザ名@IPアドレス(ubuntu) -i 秘密鍵ファイルパス
# ssh admin@172.31.66.129 -i .\.ssh\id_ed25519
ubuntuのプロンプトができればOKです。
おわりに
外部インタネットから接続できる場合には、パスワード認証の拒否設定やポートの変更をしてください。ポートスキャンやブルートフォースアタックの対策になります。
これで、環境構築ができたので、permission denied (publickey)
になるときの挙動を次回は調べていきます。
参考
SSHを使用したGitHubへの接続(github公式)
ed25519について(RFC)
ed25519について(RFC日本語訳)
Discussion