Anniversary Updateで動作環境が整った
OpenSSHは、Secure Shellプロトコルを利用するためのオープンソースソフトウェア。OpenBSDプロジェクトが開発の中心を担う。このOpenSSHには、SSHクライアント/サーバーの両方が含まれるが、GUIアプリではなく、コンソールウィンドウの中で実行するコマンドラインプログラムである。
OpenSSHは以前より存在していてWindowsでも利用できたのだが、Windows側に問題があってSSHクライアントとしての利用が制限されていた。
というのも、Windows 8まではコンソールウィンドウ内のエクスケープシーケンスがサポートされておらず、たとえばLinuxマシンに接続したとしても、Linuxアプリケーション側からは、画面制御が行えない「ダム端末」として使わざるをえず、たとえばスクリーンエディタなどを使うことができなかった。
しかし、Windows 10 Ver.1607(RS1、Anniversary Update)でWindows Subsystem for Linuxが導入されたとき、Windowsのコンソールウィンドウでエスケープシーケンスが利用できるようになった。このためにOpenSSHを使って、Windows 10からLinuxなどのスクリーンエディタの利用が可能になった。さらにはOpenSSHをサーバーとしてもクライアントとしても利用できる。ここでは、OpenSSHのインストールについて解説する。
実際にダウンロードとインストールを行なう
マイクロソフトが移植を行なったOpenSSHは、以下のURLから実行バイナリを入手可能だ。
https://github.com/PowerShell/Win32-OpenSSH/releases
配布はZIP圧縮ファイルで、その中に必要な実行ファイルなどが含まれている。32bit版、64bit版、デバッグ用のシンボル付き、シンボルなしといったファイルがあるが、通常はシンボルなしの「OpenSSH-Win32.zip」または「OpenSSH-Win64.zip」のどちらかを選ぶ。前者は32bit版、後者は64bit版である。各自の実行環境に合わせて選択する。
適当なフォルダを作ってその中でZIPファイルを解凍すれば、インストール自体は終了する。ただし、OpenSSHではインストール先フォルダ内に必要な情報をファイルとして保存するため、書き込み制限のあるフォルダーには置かないほうがよい。
また、Program FilesやProgram Files(x86)フォルダには、書き込み制限がかけられていて、かつ過去のアプリケーションとの互換性のためにフォルダ仮想化の仕組みが働くため、ファイルが別の場所に置かれてしまう。そうなると、システムの移行時などに必要なファイルを探さねばならなくなる。
なので本記事では、わかりやすくCドライブのルートフォルダーに「OpenSSH」というフォルダ(C:\OpenSSH)を作り、そこにインストールすることにする。もちろん、自由にフォルダを設定してかまわないが、その場合には、以下のコマンドなどで指定されているパスを自分の環境に合わせて書き換えて使用していただきたい。
設定は、サーバーを動かす場合にのみ必要だが、Windowsマシンであっても、サーバーを動かす価値はある。ルーターのファイアウォール機能などを正しく設定すれば、インターネット側からでもアクセスが可能だし、ローカルネットワークでも、コマンドラインで済むような仕事ならいちいちリモートデスクトップを開いたり、他のマシンの前へ移動する必要もない。
万が一、Windowsがマウスで操作できなくなっても、SSHによるリモートログインは動作できる可能性があり、コマンドラインからtasklist、taskkillコマンドで問題のあるプログラムを終了させることで、再び操作できるようになる可能性もある。これは、従来ならWindows付属のtelnetサーバーで同様のことが可能だったのだが、このtelnetでは、平文パスワードかNTLM認証しかなかったため、外部に持ち出すマシンに設定するのはセキュリティ上の問題があった。しかし、OpenSSHならば、セキュリティ上の問題も軽減できる。
もちろん、開発者モードをオンにすると自動的に動き出すServer Broker版のSSHサーバーを使ってもいいのだが、情報がなく、たとえばクライアントの公開鍵をサーバーに登録する方法さえわからない(そもそも可能なのかどうかを含めて)。なので、SSHサーバーを動作させるならOpenSSHに切り替えた方がいいだろう。
OpenSSHを設定する前にしておくこと
まず、「設定」→「更新とセキュリティ」→「開発者向け」で「開発者モード」を選択する。
これにより、GUIを使ってPowerShellの実行ポリシー切り替えが可能になる。そして、前回の記事を参考にしてServer Broker版のSSHサーバーを停止(開発者モードがオンの場合)させ、状態を「無効」として起動しないようにする。なお、Future Updateを適用するとServer Broker版のSSHサーバーの状態が「手動」に切り替わり、起動される場合があるので注意すること。
また、MS版OpenSSHでは、設定にPowerShellを使う。このため、PowerShellの実行ポリシーを変更してローカルファイルの実行に、署名のないスクリプトファイルを利用できるようにする必要がある。「開発者向け」には、「PowerShell」という項目があり、ここに「署名せず……」というチェックボックスがある。
この下にある「適用」ボタンを押しPowerShellがローカルファイルを署名なしで実行できるようにする。
次に設定を確認する。それには、PowerShellを起動し、「Get-ExecutionPolicy -List」を実行する。「Current User」の横に「RemoteSigned」と表示されればOKである。
なお、同じことは手動でも設定可能だ。それには、Win+Xキーで開くメニューやスタートメニューからPowerShellを管理者権限で起動し、以下のコマンドを実行させる。
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
この「RemoteSigned」とは、ネットワーク経由でのスクリプトファイルの実行には、署名がつけられている必要があるが、ローカルのスクリプトファイルでは署名が不要という意味だ。
次にコマンドラインから使いやすいように、OpenSSHをインストールしたパスをPath環境変数に登録する。このようにすることで、コマンドプロンプトウィンドウでは、フルパスを設定することなく、OpenSSHのコマンドが実行可能になる。
「コントロールパネル」→「システム」→「システムの詳細設定」→「環境変数ボタン」で、環境変数のダイアログボックスを表示させる。2つのリストがあるが、上がユーザー個人の環境変数設定、下がシステム全体の環境変数設定である。
複数のユーザーアカウントからOpenSSHを使う可能性を考え、下の「システム環境変数」で「Path」を選択して「編集」ボタンを押す。Path環境変数に登録されている実行ファイルのサーチパスがリスト形式で表示されるので、「新規」ボタンを押して、OpenSSHのインストールパス(C:\OpenSSH)を入力する。
これで、OpenSSHのパスが設定され、以後、開くコマンドプロンプトウィンドウでは、OpenSSHコマンドを呼び出すことができる。基本的には、この状態でOpenSSHクライアントであるssh.exeが実行できるようになる。簡易な使い方としては、接続先のIPアドレスやLAN内のホスト名を引数にして
ssh PC1
などとすることで、SSHサーバーの動作している他のマシンに接続できる。
ここまででとりあえず、クライアントが動作するようになったので、次回はサーバー側の設定を解説する。
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ