Windows10のコマンドプロンプトでSSH公開鍵認証で自動ログインする方法

更新日:2019/07/30

Windows10のコマンドプロンプトでSSHを利用するには、OpenSSHをダウンロードする必要があって、それが面倒でTera Termを使用しています。

しかし、いつの間にかWindows10が標準でSSHをサポートしていたようです。
(2017年10月かららしい)

そこで今回は、Windows10のコマンドプロンプトでSSHの公開鍵認証に接続し、さらにショートカットをダブルクリックするだけで、自動でログインできるように設定したいと思います。

 

コマンドプロンプトで公開鍵と秘密鍵を生成

すでに鍵がある場合は、ここはスキップしてください。

公開鍵認証で使用する鍵は、コマンドプロンプトで作成します。
サーバー上でも作成できますが、作成したファイルをダウンロードする際に、フォルダ名に日本語を使っているとうまくいきません。
(FTPのアプリでデータをダウンロードできる場合は、サーバー上で作成しても問題ありません。)

公開鍵と秘密鍵の生成方法

コマンドプロンプトで次のコマンドを実行します。

> ssh-keygen -t rsa -b 2048

鍵の作成場所を聞かれます。

変更しない場合はエンターを押します。
すでにファイルがあると上書きされるので、上書きされたくない場合は、別のフォルダを指定しましょう。

Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\ユーザー名/.ssh/id_rsa):←エンターまたは別のフォルダ+ファイル名

次にパスフレーズを入力します。
必要ない場合はエンターでも大丈夫です。

ただし、パスフレーズを設定したほうがセキュリティが高くなるようです。

Enter passphrase (empty for no passphrase):←エンターまたはパスフレーズ
Enter same passphrase again:←エンターまたはパスフレーズ
Your identification has been saved in C:\Users\ユーザー名/.ssh/id_rsa.
Your public key has been saved in C:\Users\ユーザー名/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ZPE7XO00mqNFCwtNHKTusinRyoucIigZeIkin837takaiyoneDE xxxx@pc
The keys randomart image is:
+---[RSA 2048]----+
|   .ooE+=o=o+=ooo|
|    ...=+o +...+ |
|   .. +.+oo . + |
|    .+.o.. o = . |
|     o= S.+ o . |
|      .oo + |
|     . .+. |
|      . ..+ |
|       ..+ |
+----[SHA256]-----+

デフォルトでは、.sshディレクトリの下に、『id_rsa』と『id_rsa.pub』が生成されます。

id_rsa:秘密鍵 パソコン側で使用
id_rsa.pub:公開鍵 サーバーで使用

 

自動ログイン設定

『秘密鍵:id_rsa』が作成されたフォルダのフルパスに、日本語が入ってないか確認します。

例:
× c:\users\テスト
c:\users\test

フォルダのフルパスがわからない場合は、次のページを参考にしてください。

参考 Windows10でファイルのフルパスを調べる方法

日本語が入っていた場合は、『id_rsa』を日本語の入っていないフォルダに移動します。

例:
C:\sshkey\id_rsa <= 新しくフォルダを作成

※『id_rsa』は、好きな名前に変更しても大丈夫です。

パスフレーズを登録

ssh-agentを有効化します。

コマンドプロンプトを管理者権限で起動し、次のコマンドを実行します。

> sc config ssh-agent start=auto
> sc start ssh-agent

通常の方法でコマンドプロンプトを起動し、次のコマンドを実行します。

> cd xxxxx  <= 秘密鍵のフォルダに移動
> ssh-add id_rsa  <= 秘密鍵のファイル名

パスフレーズの入力を求められるので、入力します。

バッチファイルを作成

メモ帳などを使い、次の内容でファイルを作成します。

ssh ユーザー名@IPアドレス -i "作成したフォルダ(フルパス)\id_rsa" -p ポート番号

ファイルの拡張子を『.bat』にして保存します。

作成したバッチファイルをダブルクリックすることで、自動ログインすることができます。
(※この時点ではサーバーの設定が終わっていないので、ログインできません。)

 

サーバーに公開鍵をコピー

SCPコマンドを使って、公開鍵『id_rsa.pub』をサーバーに転送します。

SCPコマンド構文:

SCP -P [ポート番号] [転送するファイル] [転送先]

リモート先の指定:ユーザー名@IPアドレス:フォルダまたはファイル名(フルパス)

転送先と転送元を入れ替えることで、リモートとローカルの両方向で転送できます。

実行例:

(※サーバーにログインしていない状態)
cd .ssh <=鍵を作成したフォルダに移動
SCP -P 55555 .\id_rsa.pub user001@123.45.67.123:/home/user001/

ユーザーのパスワード入力を求められるので、入力します。

エラーが出なければ成功です。

 

サーバーに公開鍵を設置

鍵を設定するユーザーでサーバーにログインします。

> ssh ユーザー名@IPアドレス -p ポート番号

ログイン後、鍵が転送されているか確認します。

$ pwd
/home/user001/ <=現在位置が転送先かどうか確認

$ ls
id_rsa.pub<=公開鍵があるか確認

鍵を格納するディレクトリを作成します。

$ mkdir .ssh
$ chmod 700 .ssh

鍵を作成したディレクトリに移動します。

$ cp id_rsa.pub ./.ssh/authorized_keys
$ chmod 600 ./.ssh/authorized_keys

この接続は、終了しないで次のステップに進みます。
(設定を間違えていると、再接続できなくなるため)

 

接続テスト

作成したBatファイルをダブルクリックして、ログインできることを確認します。

ログインできない場合は、設定を確認します。

うまくいかない状態で作業を中断するときは、サーバーに設置した『authorized_keys』のファイル名を変更しておきましょう。

更新日:2019/07/30

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。