そうだ SSH 接続で遠隔操作してみよう(公開鍵暗号方式)
というわけで、やってみました
参考にしたサイトは下記のとおりです
Arch Linux における OpenSSH の設定
https://qiita.com/tacbooon/items/02fcff8ae35c318776a0
SSH サーバのインストール,設定(Ubuntu 上)
https://www.kkaneko.jp/tools/server/pubkey.html
ArchLinux公式wiki OpenSSH
https://wiki.archlinux.jp/index.php/OpenSSH
ArchLinux公式wiki SSH 鍵
https://wiki.archlinux.jp/index.php/SSH_%E9%8D%B5
例によってブログの仕様により、何故か半角だと保存を受け付けないため全角文字を使用している箇所があります
では、始まります
◆◆◆◆ 作業をする環境 ◆◆◆◆
接続元( 接続をしたい側の PC 等 クライアント)
-> Windows11 PC
接続先( 接続を受け入れる側の PC 等 SSHサーバー)
-> ArchLinux PC / Raspberry Pi
◆◆◆◆ 事前にしておくこと(接続先) ArchLinux ◆◆◆
ファイアウォールの設定(当日記2等により設定してください)
Arch Linux インストール日記 2
◆◆◆◆ インストール、サービス起動・有効化(接続先) ArchLinux ◆◆◆◆
インストール
$ sudo pacman -S openssh
起動
$ systemctl start sshd.service
有効化
$ systemctl enable sshd.service
◆◆◆◆ SSH サービスの設定ファイルに変更を加える(接続先) ArchLinux ◆◆◆◆
$ sudo nano /etc/ssh/sshd_config ※最後が全角になってますが、本当は半角の g です
使用するポート # を外す
#Port 22 -> Port 22
使用する鍵の種類 # を外す
#HostKey /etc/ssh/ssh_host_ed25519_key
-> HostKey /etc/ssh/ssh_host_ed25519_key
root によるログインを拒否
#PermitRootLogin prohibit-password の直下に追記
PermitRootLogin no
ログインの試行回数
#MaxAuthTries 6 -> MaxAuthTries 4
ログインに鍵を使用する # を外す
#PubkeyAuthentication yes
-> PubkeyAuthentication yes
空のパスワードによるログインを拒否
PermitEmptyPasswords no
※これ以外にも設定項目がありますが、最後の最後で行います
◆◆◆◆ ファイアウォール iptables.rules で SSH で使用するポートを許可(接続先) ArchLinux ◆◆◆◆
方法1
$ sudo nano /etc/iptables/iptables.rules
-A TCP -p tcp --dport 22 -j ACCEPT
※ COMMIT の真上に追記します
方法2 ※ >> で追記となります > は上書きになるので使ってはダメ!
# iptables -A TCP -p tcp --dport 22 -j ACCEPT
# iptables-save >> /etc/iptables/iptables.rules
◆◆◆◆ 鍵の作成(接続元) Windows11 ◆◆◆◆
Windows アイコンを右クリックして、ターミナル(管理者)の項目を選択
以下、ターミナルによる作業
秘密鍵・公開鍵を作成
PS C:\Users\username> ssh-keygen -t ed25519 -m PEM -C 'コメント欄'
※コメント欄は入れなくても OK ですが、自分に分かりやすい何かを書いていた方がいいかも(通常見ることはありませんが、読み進めていくと登場します)
例)hpc-win-11
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_ed25519):
が表示されるので、そのままエンターキーを押す
恐らく、別の場所に保存したい場合に設定する為のものと思われますが、デフォで行きます
Enter passphrase (empty for no passphrase):
が次に現れますので、鍵のパスワードを入力します
Enter same passphrase again:
が最後に現れますので、同じパスワードを入力します
そして、下記のようなものが表示されたら作成成功です
Your identification has been saved in C:\Users\username/.ssh/id_ed25519
Your public key has been saved in C:\Users\username/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:8rRfxa7gxHsOzlPxGWIHMtap5oYtp4bjCd01z9yvvBI hpc-win-11
The key's randomart image is:
+--[ED25519 256]--+
| ..*o .|
| =..= |
| ..++|
| . ..+o+|
| . S. .=. =|
| o =.+ *...|
| o.. =++o |
| +.=.GE..|
| ..+ o.KB.|
+-----[SHA256]----+
本当に出来ているか、フォルダを開けて確認して下さい
なお、隠しファイルを表示するようにしていないと見れません
コマンドでは下記のとおり
cd /Users/username
cd .ssh
dir または ls
◆◆◆◆ サーバに接続(接続元) Windows11 ◆◆◆◆
接続先のユーザー名:raspi5
接続先の IP アドレス:192.168.10.7
とします
ご自身の環境に読み替えて下さい
なお、接続先の IP アドレスの確認ですが
$ ip a で確認できます(※接続先での作業)
ルーターで固定化しておくと常に同一 IPアドレス での接続が可能となります
作成した鍵の場所に移動します
PS C:\Users\username> cd .ssh
鍵のあるディレクトリに移動したら、接続先に公開鍵をコピーしていきますが、接続先に既に .ssh ディレクトリが存在してるか存在してないかでコマンドが次のように変わります
接続先に .ssh ディレクトリが既にある場合
PS C:\Users\username> type id_ed25519.pub | ssh [email protected] "cat >> /home/raspi5/.ssh/authorized_keys"
接続先に .ssh ディレクトリが無い場合
PS C:\Users\username> type id_ed25519.pub | ssh [email protected] "mkdir /home/raspi5/.ssh; cat >> /home/username/.ssh/authorized_keys"
初めて接続する場合は
Are you sure you want to continue connecting (yes/no/[fingerprint])?
と聞かれますので yes と入力してリターンキーを押します
なお、 y では通りません
その後でパスワードを聞かれますので、入力してリターンキーを押します
※ この時点では鍵のやり取りはしてませんので接続先ユーザーのパスワードです
特にエラーが出てなければ成功しているはずなので、普通にログインしてみます
PS C:\Users\username> ssh [email protected]
※ 成功していれば
Enter passphrase for key 'C:\Users\username/.ssh/id_ed25519':
と表記が変わります
ここで、初めて鍵のパスワードを入力します
そして、成功すれば
[raspi5@raspi5hpc ~]$
と表示されます
試しに、本当に鍵が登録されているか確認します
$ cd .ssh
$ ls
authorized_keys
$ nano authorized_keys
ssh-ed25519 ~中略~ hpc-win-11
authorized_keys に自分が設定したコメントの箇所がありました
これで登録されたことが確認出来ました
Ctrl+x で保存せずに終了します
これで、終了・・・ではありません!
次に進みます
◆◆◆◆ 鍵以外ではログインできないようにします (接続元) Windows11 SSH接続済 ◆◆◆
※ これを設定しないと、最終的に普通のパスワードでのログインが出来てしまいます
$ sudo nano /etc/ssh/sshd_config ※最後のgは本当は半角の g です
以下の場所の下に、追記をします
#PasswordAuthentication yes
PasswordAuthentication no
これが、パスワードでのログイン自体を拒否するものになります
保存・終了した後、sshd のサービスを再起動させます
$ su
Password: root パスワード
# systemctl restart sshd.service
これで本当の終了となりますが、ポート番号を標準の22でいいの?
という意見もあるかもしれないので、次で説明を加えておきます
◆◆◆◆ 任意 そうだ、ポート番号を 4444 に変えよう (接続元) Windows11 SSH接続済 ◆◆◆◆
※ 既にログイン状態とします
※ tacbooon さんのサイト https://qiita.com/tacbooon/items/02fcff8ae35c318776a0 によると、1024-32767 の範囲内に設定とありますので、それに合わせたほうがいいでしょう
root で作業します
$ su
Password: root パスワード
iptables.rules の設定の変更
# nano /etc/iptables/iptables.rules
-A TCP -p tcp --dport 22 -j ACCEPT
-> -A TCP -p tcp --dport 4444 -j ACCEPT
# systemctl restart iptables.service
# systemctl status iptables.service
sshd_config の設定の変更
# nano /etc/ssh/sshd_config ※ 最後のgは半角の g です(何度目?
Port 22
-> #Port 22
-> Port 4444
# systemctl restart sshd.service
# systemctl status sshd.service
ログアウトします
# exit
$ exit
ログインしてみます
PS C:\Users\username> ssh [email protected]
※入れなくなっているはずです
ポート番号4444でログインする方法
PS C:\Users\username> ssh -p 4444 [email protected]
これでエラーが表示されずに入れたら OK です
基本的に自分の家の中だけで接続する場合は必要ないと思いますが、外部から接続する場合は変えておいた方がいいかも知れません
なお、当然外部から接続するためにはルーターでポートの開放が必要になりますが、ここでは説明しません
では、よい 遠隔操作ライフを
(/・ω・)/ コロコロコロ =〇