マイナビニュースマイナビ

OpenSSHでWindowsへリモートログインする

【連載】

PowerShell Core入門 - 基本コマンドの使い方

【第172回】OpenSSHでWindowsへリモートログインする

[2021/10/29 08:00]後藤大地 ブックマーク ブックマーク

Linuxサーバへのリモートログインにはsshが使われることが多い。sshは開発者や管理者に欠かすことのできない機能であり、Linuxサーバへの最初の入り口でもある。最近ではクラウドやコンテナにLinux環境を構築することが多いため、物理的なLinuxサーバを見たことがないとか、Linuxサーバの物理コンソールからログインしたことがないといったユーザーのほうが多いのではないだろうか。

こうなってくると、WindowsでもLinuxと同じようにsshでログインできるようにしたい。同じツールでログインできたほうが便利だ。

Windowsにssh経由でログインするというのはあまりイメージが湧かないかもしれないが、MicrosoftはすでにWindows 11やWindows 10にOpenSSHサーバを機能として導入しており、ssh経由でログインできるようになっている。セットアップは少々面倒だが、WindowsやPowerShellを活用していく上ではぜひとも利用したい機能だ。今回は、Windows 11およびWindows 10でOpenSSHサーバを有効化する方法を説明する。

OpenSSHサーバセットアップ (Windows 11)

Windows 11では設定プリケーションからOpenSSHサーバを有効化できる。設定アプリケーションを起動し、 「アプリ」→「オプション機能」→「機能を表示」→「OpenSSHサーバー」にチェック→「次へ」→「インストール」を選択し、システムを再起動した後に機能を有効化できる。

OpenSSHサーバーがインストールされた状態

OpenSSHサーバの設定ファイルは「C:\ProgramData\ssh\sshd_config」だ。次のようにデフォルトの設定ファイルをコピーして編集する。なお、以降の作業はすべて管理者権限のWindows Terminalで実行する。

copy C:\WINDOWS\SYSTEM32\OPENSSH\sshd_config_default C:\ProgramData\ssh\sshd_config
notepad C:\ProgramData\ssh\sshd_config

C:\ProgramData\ssh\sshd_configは最後の2行は次のような内容になっていると思う。

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

この行の先頭に#を挿入してコメントアウトする。

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

OpenSSHサーバへのログインは、公開鍵暗号を基本と考えよう。

ただしWindowsでは、C:\ProgramData\ssh\administrators_authorized_keysが存在し、かつ適切なアクセス許可が設定されていないと、C:\ProgramData\ssh\administrators_authorized_keysをチェックしに行った後で公開鍵認証そのものが無効になってしまう。つまり、個々のユーザーの$HOME/.ssh/authorized_keysよりもC:\ProgramData\ssh\administrators_authorized_keysが優先されてしまい、$HOME/.ssh/authorized_keysに公開鍵を配置しておいても使われないのだ。これはかなり不便である。LinuxやMacといったほかのOSと同じように、$HOME/.ssh/authorized_keysの公開鍵を使った公開鍵認証が有効になってほしい。

$HOME/.ssh/authorized_keysを有効にする方法はいくつかある。ここでは前述したようにC:\ProgramData\ssh\sshd_configの該当部分をコメントアウトすることで、$HOME/.ssh/authorized_keysを有効にする。

OpenSSHサーバにアクセスする必要があるので、ファイアウォールでOpenSSHサーバへのアクセスを許可する必要がある。まず、次のようにコマンドを実行してファイアウォールの設定を確認する。

Get-NetFirewallRule -Name *ssh*

Windows 11では最初からOpenSSHサーバへのアクセスは許可されているはずだが、もし許可されていない場合には、次のようにコマンドを実行してOpenSSHサーバへのアクセスを許可する。

New-NetFirewallRule -Name  -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

ここまで作業したら、次のコマンドでOpenSSHサーバを起動する。

Start-Service sshd

もし、OpenSSHサーバを起動した後でC:\ProgramData\ssh\sshd_configを書き換えたりしたのであれば、次のコマンドでOpenSSHサーバを再起動する。

Restart-Service sshd

このままだと、Windows 11を再起動するごとに手動でOpenSSHサーバを起動しなければならない。そこで、Windows 11起動時にOpenSSHサーバが自動的に起動するように、次のコマンドを実行してOpenSSHサーバの自動起動を有効化する。

Set-Service -Name sshd -StartupType 'Automatic'

sshでログインした場合のシェルは「cmd.com」になっている。これをPowerShell 7へ変更しよう。次のコマンドを実行することでsshでログインした際のシェルがPowerShell 7となる。

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force

これでWindows 11におけるOpenSSHサーバのセットアップは完了だ。

OpenSSHサーバセットアップ (Windows 10)

Windows 10におけるOpenSSHサーバのセットアップ方法はWindows 11とほとんど同じだ。ただし、OpenSSHを設定アプリケーションで有効化する方法が(というかラベルの名前が)少しだけ異なっている。Windows 10では設定アプリケーションから「アプリ」→「オプション機能」→「機能の追加」→「OpenSSHサーバー」にチェック→「インストール」を選択した後、システムを再起動することでOpenSSHサーバを有効化できる。

OpenSSHサーバーがインストールされた状態

以降の作業は管理者権限のWindows Terminalまたはほかのターミナルで実行する。まず、デフォルトの設定ファイルをコピーして編集する。

copy C:\WINDOWS\SYSTEM32\OPENSSH\sshd_config_default C:\ProgramData\ssh\sshd_config
notepad C:\ProgramData\ssh\sshd_config

$HOME/.ssh/authorized_keysを有効化するために、C:\ProgramData\ssh\sshd_configファイルの次の2行を編集する。

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

次のように最後の2行をコメントアウトして保存する。

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

続いて、OpenSSHサーバにアクセスできるようにファイアウォールの設定を変更する。まず、次のようにコマンドを実行してOpenSSHサーバに関するファイアウォールルールを確認する。Windows 10ではデフォルトでOpenSSHサーバへのアクセスは禁止されていると思う。

Get-NetFirewallRule -Name *ssh*

次のようにコマンドを実行してOpenSSHサーバへのアクセスを許可する。

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

ここまで設定したら次のコマンドを実行してOpenSSHサーバを起動する。

Start-Service sshd

Windows 10を再起動するとOpenSSHサーバは停止してしまうので、次のように自動起動の設定を有効化する。

Set-Service -Name sshd -StartupType 'Automatic'

OpenSSHサーバ起動後にC:\ProgramData\ssh\sshd_configを書き換えたりしたのであれば、次のコマンドでOpenSSHサーバを再起動する。

Restart-Service sshd

sshでログインした場合のシェルは「cmd.com」になっている。これをPowerShell 7へ変更する。次のコマンドを実行することでsshでログインした際のシェルがPowerShell 7となる。

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force

これでWindows 10におけるOpenSSHサーバのセットアップは完了だ。

OpenSSHサーバの動作を確認

セットアップがうまくいけば次のようにOpenSSHサーバの動作を確認できる。

OpenSSHサーバの動作を確認

OpenSSH経由でWindowsにログインした場合、Windowsの機能をフルに活用するにはいくらか自分で工夫する必要があり、PowerShellスクリプトもそこで大いに役に立つ。次回以降はこの辺りの説明を行っていく。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

【連載】RPA入門 - ツールで学ぶ活用シーン

【連載】RPA入門 - ツールで学ぶ活用シーン

AIには、ルールベース、機械学習、深層学習(ディープラーニング)の3つのレベルがあり、レベルが上がるに連れてより高度な人工知能を実現しますが、AIのスピンオフという位置付けで、Digital Labor(仮想知的労働者)によるホワイトカラー業務の自動化を実現するRPAが注目されています。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で TECH+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
Slackで始める新しいオフィス様式
Google Workspaceをビジネスで活用する
人生を豊かにするパラレルキャリア~VUCA時代に新しい生き方を選ぶ理由とは~
ニューノーマル時代のオウンドメディア戦略
ミッションステートメント
次世代YouTubeクリエイターの成長戦略
IoTでできることを見つけるための発想トレーニング
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
マイクロサービス時代に活きるフレームワーク Spring WebFlux入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る