Windowsに標準搭載のSSHコマンドの基本的な使い方

Windowsに標準搭載のSSHコマンドの基本的な使い方

現在のWindows 10や11にはSSHクライアント機能が標準搭載されており、サードパーティーのSSHクライアントソフト(Puttyなど)がなくても、リモートマシンにSSH接続できるようになりました。

そこでここでは、Windowsに標準搭載のSSHコマンドを使って、リモートサーバーへSSH接続する手順や、鍵ファイルの生成手順などを紹介します。なお、Linux環境のsshコマンドと使い方はほぼ同じです。

SSHで利用できる各コマンド(scp, sftp, ssh, ssh-add, ssh-agent, ssh-keygen, ssh-keyscan)の詳しい使い方を知りたい場合は、OpenSSHのマニュアルの参照をおすすめします。

OpenSSH: Manual Pages

SSHクライアントで利用できるコマンド

WindowsにSSHクライアント機能として搭載されるコマンドは「C:\Windows\System32\OpenSSH」フォルダーに配置されています。

PS C:\> Get-ChildItem C:\Windows\System32\OpenSSH


    ディレクトリ: C:\Windows\System32\OpenSSH


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2021/10/06     22:25         307712 scp.exe
-a----        2021/10/06     22:25         374272 sftp.exe
-a----        2021/10/06     22:25         481280 ssh-add.exe
-a----        2021/10/06     22:25         382976 ssh-agent.exe
-a----        2021/10/06     22:25         662016 ssh-keygen.exe
-a----        2021/10/06     22:25         557568 ssh-keyscan.exe
-a----        2021/10/06     22:25         946176 ssh.exe

リモートサーバーへSSH接続する

標準搭載されたSSHコマンドを使ってリモートサーバーへSSH接続する手順は、コマンドプロンプトもしくはPowerShellを起動し、以下のいずれかのコマンドを実行します。

以下は「tarou」というユーザー名で「remote-server」に接続する場合の例です。

PS C:\> ssh tarou@remote-server
PS C:\> ssh -l tarou remote-server

接続を終了するときは「exit」と入力します。

なお、リモートサーバに初めて接続したときのサーバーの鍵は「%UserProfile%.sshknown_hosts」に保存されます。

鍵認証で接続するときは

公開鍵認証でSSH接続するときに利用する鍵ペアは、ssh-keygenコマンドを使って生成できます。

PS C:\> ssh-keygen

秘密鍵のパスフレーズは、必要に応じて設定します。

Generating public/private rsa key pair.Enter file in which to save the key (C:\Users\hoge\.ssh\id_rsa):

生成された鍵ペア(秘密鍵と公開鍵)は、デフォルトでユーザープロファイル内の「.ssh」フォルダーに保存されます。

あとは、生成された公開鍵の内容を、SSHサーバーへ接続する時に使用するユーザーの「~/.ssh/authorized_keys」に追記します。

これで、次のコマンドでSSHサーバーに鍵認証で接続できるようになります。

PS C:\> ssh -i "C:\Users\hoge\.ssh\id_rsa" -l tarou remote-server

秘密鍵を任意の場所に保存したいときは

公開鍵認証を使ってリモートマシンにSSH接続する場合、指定する秘密鍵ファイルのデフォルトの保存場所は「C:¥Users\<ユーザー名>\.ssh」となっており、別の場所に保存した秘密鍵ファイルを指定して接続しようとすると、以下のような警告が表示され接続できない場合があります。

@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'E:\secret_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "E:\secret_key": bad permissions
[email protected]: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

これは、秘密鍵ファイルを保存しているフォルダーのアクセス許可設定が緩くセキュリティ的に問題があるためです。

そのため、任意のフォルダーに保存した鍵ファイルを指定してSSH接続したい場合は、秘密鍵ファイルを保存するフォルダーのアクセス許可設定を変更して、現在サインインしているユーザーのみがアクセスできるようにする必要があります。

秘密鍵ファイルを保存するフォルダーのアクセス許可設定を変更する

秘密鍵ファイルを保存するフォルダーのアクセス許可設定を変更する手順は、次のとおりです。

まず、秘密鍵ファイルを保存したいフォルダーを右クリックして「プロパティ」を選択します。

Windowsに標準搭載のSSHコマンドの基本的な使い方

プロパティ画面が表示されるので「セキュリティ」タブを選択して「詳細設定」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

セキュリティの詳細設定画面が表示されるので「継承の無効化」をクリックして「このオブジェクトから継承されたアクセス許可をすべて削除します」を選択します。

Windowsに標準搭載のSSHコマンドの基本的な使い方

Windowsに標準搭載のSSHコマンドの基本的な使い方

セキュリティの詳細設定画面に戻るので「追加」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

アクセス許可エントリ画面が表示されるので「プリンシパルの選択」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

ユーザーまたはグループの選択画面が表示されるので「詳細設定」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

画面が展開されるので「検索」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

検索結果欄にユーザーやグループの一覧が表示されるので、自分のユーザーアカウントを選択して「OK」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

「選択するオブジェクト名を入力してください」欄に選択したユーザーアカウントが表示されていることを確認して「OK」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

アクセス許可エントリ画面に戻るので「基本のアクセス許可」欄で「フルコントロール」と「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーのみに適用する」にチェックを入れて「OK」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

セキュリティの詳細設定画面に戻るので「子オブジェクトのアクセス許可エントリすべてを、このオブジェクトからの継承可能なアクセス許可エントリで置き換える」にチェックを入れて「OK」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

警告画面が表示されるので「はい」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

プロパティ画面に戻ったら、自分自身にフルコントロールのアクセス許可が設定されており、他のユーザーがアクセスできない設定になっていることを確認して「OK」をクリックします。

Windowsに標準搭載のSSHコマンドの基本的な使い方

以上で、設定したフォルダーに保存した秘密鍵ファイルを指定してSSH接続できます。

秘密鍵ファイルは重要なファイルのため、自分が管理しやすい場所に保存しておきたいという方も多いのではないでしょうか。そのようなときは、ここで紹介した方法が役立ちます。

あとがき

サードパーティのSSHクラアントソフトと比べると機能的にはシンプルですが、Windowsの標準機能として利用できるようになったのはうれしい限りです。