Skip to content

MS_OpenSSH

nishi_74322014 edited this page Aug 19, 2026 · 1 revision

OpenSSH

概要

  • Windows 10 以降に標準搭載
  • CMDPowerShellで ssh コマンドを使用できる。

補足(Windows に OpenSSH が入った意味): これは地味だが
Windows の運用スタイルを変えた変更である。

【従来】 Windows から Linux へ  → PuTTY / Tera Term を別途インストール
         Windows から Windows へ → RDP(GUI)、WinRM / PowerShell Remoting

【現在】 どちらも ssh コマンド 1 つで済む

特に重要なのは、Windows が SSH サーバにもなれる点である
(OpenSSH Server 機能)。これにより、

効果 内容
踏み台を統一できる Linux/Windows で同じ手順・同じ鍵
CI/CD から扱いやすい Ansible、GitHub Actions 等が SSH 前提
PowerShell Remoting over SSH WinRM ではなく SSH でリモート実行できる
鍵認証 パスワードを送らない運用が可能

なお、Git for Windows や WSL にも ssh が同梱されるため、
環境に複数の ssh が存在することになる。
鍵の置き場所(%USERPROFILE%\.ssh と WSL 内の ~/.ssh)が
別々になる点は混乱しやすいので注意する。

詳細

インストール

  • Windows Server 2019 または Windows 10 1809 なら、機能を有効化すれば良い。
  • [設定]を開始し、[アプリ]>[アプリと機能]>[オプション機能の管理]の順に選択。

補足(クライアントとサーバは別の機能): オプション機能には
2 つあり、混同しやすい。

機能 役割 既定
OpenSSH クライアント sshscpssh-keygen Windows 10 1809 以降は既定で有効
OpenSSH サーバー sshdこのマシンに繋がせる 無効(明示的に追加が必要)

PowerShell からも導入できる。

Get-WindowsCapability -Online -Name OpenSSH*
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

サーバー機能を有効にすると22 番ポートが開くため、

  • Windows ファイアウォールの規則を送信元で絞る
  • パスワード認証を無効化して鍵のみにする
    sshd_configPasswordAuthentication no

といった対策が要る
(インターネットに直接公開しないこと。
リモート デスクトップ ゲートウェイの 3389 番と同じ考え方)。

接続方法

パスワード

ssh ユーザ名@アドレス(IP等)
ユーザ名@アドレス(IP等)'s password: xxxxxx

公開鍵

ssh -i <秘密キーのパス> ユーザ名@アドレス(IP等)

補足(Windows 特有の落とし穴:鍵のパーミッション): Linux では
秘密鍵のパーミッションを 600 にするが、
Windows では NTFS の ACL が同じ役割を果たす

秘密鍵の ACL が緩いと、次のエラーで接続を拒否される。

Permissions for 'xxx.pem' are too open.
It is required that your private key files are NOT accessible by others.

対処は、エクスプローラのプロパティから
継承を無効化し、自分以外のアカウントを削除する、
または icacls を使う。

icacls key.pem /inheritance:r
icacls key.pem /grant:r "%USERNAME%:R"

KiTTY(PuTTY)で述べられている
サーバ側の ~/.sshauthorized_keys のパーミッション
対になる話で、鍵認証は「両側の権限が正しいこと」が前提である。

なお、毎回 -i を書かずに済ませるには
%USERPROFILE%\.ssh\config に設定を書く。

Host myserver
    HostName 10.0.0.10
    User azureuser
    IdentityFile ~/.ssh/id_ed25519

これで ssh myserver だけで接続できる。

ポイント

  • exit で切断できる。
  • ダブルホップ的な事もできる。

補足(「ダブルホップ」の実現方法): 踏み台を経由して
奥のサーバに入る方法は複数あり、ProxyJump が現在の推奨である。

方法 コマンド 特徴
多段ログイン 踏み台に入ってから ssh 踏み台に秘密鍵を置くことになる(危険)
ProxyJump(-J) ssh -J bastion target 鍵は手元だけ。OpenSSH 7.3 以降
エージェント転送(-A) ssh -A bastion 踏み台が侵害されるとエージェントを悪用され得る
ssh -J user@bastion user@target

あるいは config に書く。

Host target
    HostName 10.0.1.20
    ProxyJump bastion

踏み台に秘密鍵を置かないという点が重要で、
踏み台が侵害されても鍵が漏れない。
AzureのPoC環境を契約する
「踏み台(Jumpbox)は危険」とされているのは、
まさに踏み台に資格情報が集まることを指しており、
ProxyJump はその一部を緩和する手段になる。

なお、ポート フォワード-L / -R)を使えば、
踏み台経由で RDP や DB に接続することもできる。

ssh -L 13389:target:3389 user@bastion

手元の 13389 番に RDP 接続すると、踏み台経由で target に届く。

参考


Tags: 移行, Windows, Linux

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally