2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macからWindowsに公開鍵認証(RSA方式)でsshログインする話

Last updated at Posted at 2022-03-12

タイトル通りのことをやろうとして約1日かかってしまったので備忘録として残します。SSH接続カンタンに見えてムズカシイ...

環境

・macOS Montrey 12.2.1
・Windows 11 home 21H2
・OpenSSH (Windows)
・iTerm (mac)
・PowerShell (Windows)

ルーター側の設定

まずはルーターの設定です。使用するルーターによって設定画面が異なりますが、「ポート開放」あるいは「ポートフォワーディング」なる設定をする必要があります。
自分の例(Buffaloルーター)ですが、「セキュリティー」->「ポート変換」に移動して、

・新規追加:任意の名前
・Internet側IPアドレス:エアステーション側のInternet側IPアドレス
・「プロトコル」->「TCP/UDP」:SSH(TCPポート:22)
・LAN側IPアドレス:Windowsに割り当てられたローカルIP
・LAN側ポートには何も記入しない

を設定します。WindowsのローカルIPは

powershell
ipconfig

で出力されるIPv4アドレスという箇所で確認できます。

OpenSSHクライアントのインストール

ここからWindowsの設定をしていきます。
Windowsをサーバー化するには「OpenSSHクライアント」のインストールが必要です。
Windowsをサーバー化するうえで、今回は「OpenSSHクライアント」を利用します。インストール済みかどうかは「設定」->「アプリ」->「オプション機能」で確認できます。
設定 2022_03_09 6_28_13.png
ここにOpenSSHクライアントがなければ、オプション機能の一番上にある「オプション機能を追加する」の「機能を表示」ボタンをクリックすればインストールが可能な機能が表示されます。ここでOpenSSHを探してインストールしましょう。
設定 2022_03_09 6_32_08.png

OpenSSHの設定

まずは「Windowsツール」->「サービス」に移動。
スクリーンショット 2022-03-09 065044.png
スクリーンショット 2022-03-09 065239.png
「OpenSSH SSH Server」を開いて
スクリーンショット 2022-03-09 065500.png

・「サービスの種類」を「自動(遅延開始)」に変更
・「サービスの状態」の「開始」をクリック

スクリーンショット 2022-03-09 070154.png

サーバー側のSSH設定

まずはサーバー側(Windows)でSSHの設定を行っていきます。
PowerShellを管理者として起動します。
参考 - 【Windows】PowerShellを管理者権限で起動するコマンド

powershell
Start-Process PowerShell.exe -Verb runas

1. .sshディレクトリの作成

SSH接続には.sshというディレクトリが必要ですので、ない場合は事前に作成しておきます。
.sshディレクトリは、自身のホームディレクトリC:\Users\<ユーザー名>の直下に置くのが一般的かと思いますので、今回は以下の場所にあることを想定して進めていきます。

C:\Users\<ユーザー名>\.ssh

なお、.sshがない場合は以下の2種類のコマンドを実行して作成します。

powershell
New-Item "C:\Users\<ユーザー名>\.ssh" # .sshディレクトリ作成
icacls "C:\Users\<ユーザー名>\.ssh" /remove Everyone # 閲覧権限からEveryoneを削除(これをしないとSSH接続できない)

同様に、クライアント側(mac)にも.sshディレクトリを作成しておきます。クライアント側の.sshの場所はどこでも大丈夫です。

2. サーバー側のsshd_configファイルの書き換え

まずはsshd_configファイルのあるディレクトリに移動します。

powershell
Set-Location "C:\ProgramData\ssh"

そしてテキストエディタ(メモ帳など)で内容を編集します。書き換えるファイル名はssh_configではなく sshd_config なのでお間違えの無いよう。

powershell
notepad ".\sshd_config"

ファイルが開けたら、その中の PubkeyAuthentication yesMatch User および AuthorizedKeysFile それぞれの行頭の#を削除します(コメントでない状態とします)。
AuthorizedKeysFileの箇所にはSSH接続時に使用する公開鍵のパスを記載します。デフォルトで.ssh/authorized_keysとなっており、このままでも問題ありません(この設定の場合、後述するauthorized_keysファイルは.sshディレクトリ直下に置くことになります)。
スクリーンショット 2022-03-12 152357.png
なお、最後の2行に

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

という記述がありますが、administratorsというGroupを使うことはないので、私は不具合のないようコメントアウトしました。

以上でサーバー側でのSSH設定は完了です。

クライアント側(mac)でのSSH設定

1. macで公開鍵と秘密鍵を生成

macのコマンドプロンプトを開いて、.sshディレクトリをアクセス制限をかけつつ作成します。

zsh
cd <.sshを格納したいディレクトリ>
mkdir .ssh
chmod 700 .ssh    # .sshにはファイル所有者しかアクセスできないようにする

.sshに移動して公開鍵と秘密鍵を作成します。

zsh
cd .ssh
ssh-keygen -t ed25519 # Ed25519というアルゴリズムで生成

最初に「どのディレクトリに作成するか」を聞かれます。何も入力せずにEnterを押せば質問文右の()内のパスに鍵が作成され、任意のディレクトリ(絶対パス)を入力すればそこに作成されます。id_ed25519ファイルが秘密鍵、id_ed25519.pubファイルが公開鍵です。

続いてパスフレーズの入力が求められます。パスフレーズを設定したくない場合はそのままEnter、入力すればパスフレーズが設定されます。以上で鍵の作成が完了します。

2. 公開鍵の中身をサーバーに登録

作成出来たら、以下コマンドにて公開鍵id_rsa.pubの中身をWindowsに登録します。
以下コマンド実行後,公開鍵の内容が自動的にWindows上にauthorized_keysとして登録されます.

ssh-copy-id -i <公開鍵のパス> <Windowsのユーザー名>@<WindowsのローカルIP>
# 例)ssh-copy-id -i ~/.ssh/id_ed25519.pub hoge@192.168.123.45

接続してみる

以上でSSH接続を行うための準備が完了です!試しに接続してみましょう。
クライアント側(mac)のコンソール上で.sshのあるディレクトリまでcdコマンドで移動したら、以下のコマンドを実行します。

zsh
ssh -i .ssh/id_ed25519 <Windowsのユーザー名>@<WindowsのローカルIP>

これで無事接続出来たら

<Windowsのユーザー名>@<Windowsの名前>

上記のような表示に切り替わるはずです。
ただし、サーバーのある場所をローカルIPで指定しているこの方法では、同じLANに接続していないとSSH接続できません。ので、次はWANから接続する方法を説明します。

SSH接続をより安全なものにする

ここまでくるとSSH接続ができる状態になっていると思いますが、セキュリティ面ではまだ不安が残っていることも事実です。
ここでは

  • SSH接続は公開鍵認証のみ受け付ける(パスワードでのログインを許可しない)
  • root(管理者)としてログインできないようにする
といった設定を行います。

sshd_configの設定

サーバー側(Windows)のsshd_configファイルを修正するだけで安全な接続ができるようになります。
sshd_configは管理者権限でのみ変更が可能なので、まずはPowerShellを管理者として実行します。
実行出来たらsshd_configファイルのあるディレクトリに移動

powershell
Set-Location "C:\ProgramData\ssh"

メモ帳などのエディタでsshd_configを編集します。

powershell
notepad sshd_config

ファイルが開いたら、以下の文を追加します。

PubkeyAuthentication yes    # 公開鍵認証の許可 
PasswordAuthentication no   # パスワード認証を許可しない
PermitRootLogin no          # rootとしてのログインを禁止

保存したらsshdを再起動します。

powershell
net stop sshd
net start sshd

これでより安全にSSH接続が行えるようになります!

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?