現在の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のマニュアルの参照をおすすめします。
目次
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接続したい場合は、秘密鍵ファイルを保存するフォルダーのアクセス許可設定を変更して、現在サインインしているユーザーのみがアクセスできるようにする必要があります。
秘密鍵ファイルを保存するフォルダーのアクセス許可設定を変更する
秘密鍵ファイルを保存するフォルダーのアクセス許可設定を変更する手順は、次のとおりです。
まず、秘密鍵ファイルを保存したいフォルダーを右クリックして「プロパティ」を選択します。
プロパティ画面が表示されるので「セキュリティ」タブを選択して「詳細設定」をクリックします。
セキュリティの詳細設定画面が表示されるので「継承の無効化」をクリックして「このオブジェクトから継承されたアクセス許可をすべて削除します」を選択します。
セキュリティの詳細設定画面に戻るので「追加」をクリックします。
アクセス許可エントリ画面が表示されるので「プリンシパルの選択」をクリックします。
ユーザーまたはグループの選択画面が表示されるので「詳細設定」をクリックします。
画面が展開されるので「検索」をクリックします。
検索結果欄にユーザーやグループの一覧が表示されるので、自分のユーザーアカウントを選択して「OK」をクリックします。
「選択するオブジェクト名を入力してください」欄に選択したユーザーアカウントが表示されていることを確認して「OK」をクリックします。
アクセス許可エントリ画面に戻るので「基本のアクセス許可」欄で「フルコントロール」と「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーのみに適用する」にチェックを入れて「OK」をクリックします。
セキュリティの詳細設定画面に戻るので「子オブジェクトのアクセス許可エントリすべてを、このオブジェクトからの継承可能なアクセス許可エントリで置き換える」にチェックを入れて「OK」をクリックします。
警告画面が表示されるので「はい」をクリックします。
プロパティ画面に戻ったら、自分自身にフルコントロールのアクセス許可が設定されており、他のユーザーがアクセスできない設定になっていることを確認して「OK」をクリックします。
以上で、設定したフォルダーに保存した秘密鍵ファイルを指定してSSH接続できます。
秘密鍵ファイルは重要なファイルのため、自分が管理しやすい場所に保存しておきたいという方も多いのではないでしょうか。そのようなときは、ここで紹介した方法が役立ちます。
あとがき
サードパーティのSSHクラアントソフトと比べると機能的にはシンプルですが、Windowsの標準機能として利用できるようになったのはうれしい限りです。