コンテンツへスキップ

Windows OS で SSH 接続する場合の手順をまとめました。
【Windows Server 2016、2019、Windows 10】

「SSH でログイン」って聞くと何か難しい感じしませんか?
Windows ユーザーだと特に馴染みがなく、拒否反応を起こしやすいのではないでしょうか。

大丈夫です。SSH はWindows でも友達になれます。

今や標準でWindows 10、WindowsServer 2019などに「OpenSSH」が同梱されているので、
今後はWindows ユーザーでもSSH 接続があたりまえになってくるかもしれません。

実際、Linux サーバー上のシェルがWindows 上で動かせるようになるわけなのでそのメリットは大きいと思います。例えば一時的なデータのやり取りなどは、scp コマンドでいけます。

AWS などクラウドサービスの普及で、Linux とWindows の混合環境は珍しくなくなるでしょう。

というわけで、明日のための「SSH クライアントの使い方」や、
OS 毎の「SSH サーバー設定方法」についてまとめました。

また、SSH 接続をするテスト環境についても触れてます。

Windows OS で SSH 接続する

SSH とは。

Secure Shell (セキュアシェル)

Secure Shell (セキュアシェル)の事で、安全にリモート接続する方法です。
通信が暗号化されたり、認証に暗号鍵を使用できたりといい事ばかりです。

また、この接続時のプロトコルの名前でもあります。バージョン1 と2 があります。

バージョン1 の時はそこまでセキュアではなかったようです。最近はバージョン2 が主流かと思います。
ssh コマンドでバージョン1 を指定しようとすると、「サポートしていない」旨のメッセージが表示されますし。
パケットキャプチャで確認すると、プロトコルのバージョンが確認できます。

Linux では一般的で、当たり前のようにSSH 接続するするみたいですね。
AWS でLinux のEC2 を触ったときにリモートする手段がSSH 接続しかなくて、ナニコレってなりましたが、
今は OpenSSH が同梱されるようになったので、Windows でも標準の機能としてSSH 接続が出来ます。

SSH 接続する準備

クライアント側(接続する側の端末)

Windows でSSH 接続するには、「OpenSSH クライアント」という
オプション機能をインストールします。

Windows ロゴマーク > 設定
 >アプリ >アプリと機能 >オプション機能の管理( 機能の追加)

サーバー(接続される側の端末)

SSH 接続を処理するには、ログイン先のサーバーにSSH サーバー(sshd)をインストールします。

Windows 10、WindowsServer 2019

Windows 10、WindowsServer2019 は、SSH サーバー が機能の追加からインストール出来ます。

Windows ロゴマーク > 設定
 >アプリ >アプリと機能 >オプション機能の管理( 機能の追加)

■ Windows Server 2019 へ 鍵認証を使ってSSH 接続する。

WindowsServer 2016

WindowsServer 2016 では別途「sshd」をダウンロードしてインストールする必要があります。

■ WindowsServer 2016 にsshd をインストールしてSSH 接続する。

WindowsServer にSSH 接続すると、シェルが「コマンドプロンプト」に代わる(?)ので、
Linux 感覚だと若干違和感あります。
また、Linux の資料を参考に作業していると、コマンドがエラーになったりするでしょう。

SSH コマンドについて

基本的なパスワードによるログイン。

下記の書式にて、パスワードを使ったSSH 接続ができます。

ssh <接続先のユーザー名>@<ホストアドレス>

※ユーザー名を省略した場合は、現在のログインユーザー名が使用されます。

例:サーバー「beccou-sever」のユーザー「uniuni」にSSH 接続する。

ssh uniuni@beccou-server

※ポートを指定する場合は「-p <ポート番号>」を追記します。

ssh uniuni@beccou-server -p 60000

はじめてログインする端末の場合、下記のfingerprint のメッセージが表示されます。
ここでyes と答えると、ユーザーフォルダ直下の「.ssh\known_hosts」ファイル内に接続先の公開鍵が保存されます。

known_hosts ファイルに追加された。

サーバーの置き換えなどで、接続先の公開鍵が変更になった場合、
エラーになって接続が出来なくなります。

その場合は、known_hosts ファイルから公開鍵を削除する必要があります。

ログインユーザーが「マイクロソフトアカウント」の場合

ユーザーフォルダのフォルダ名を参考にログインしてみてください。
そのままメールアドレスをユーザーID に使ってもログインできます。

Microsoft アカウントユーザーでログインしている端末にSSH 接続するには。

パスワードあってるのに、なんかログインできないなーって場合は、一度リモート先のPC でパスワードを使ったログインを実行してから再度SSH 接続を試してみてください。

※ログインでパスワード認証ができない場合は、アカウント >サインインオプションの設定から
「Windows Hellow サインインのみを許可する」の設定をオフにします。

暗号鍵 を使用したログイン

これだけだと、パスワードだけでログインできてしまうので、暗号鍵ファイルを使った鍵認証の仕組みでセキュリティを強化します。

暗号鍵を使ってログインする時は、「-i」オプションを追加します。

ssh -i <秘密鍵ファイル> <接続先のユーザー名>@<ホストアドレス>

例:サーバー「beccou-sever」のユーザー「uniuni」に秘密鍵(id_rsa)を使用してSSH 接続する。

ssh -i .ssh/id_rsa uniuni@beccou-server

ログイン時にサーバーから暗号解読チャレンジが実施され、解読出来ると本人として認証される仕組みです。
(謎解きのチャレンジを投げてくるって、なんかスフィンクスの話みたいだと思ったり。)

「暗号鍵」を使用したログインの設定方法。

認証に使う暗号鍵を入手するには。

認証に使う「鍵」は、クライアント側で生成できます。

ssh-keygen

■ 暗号鍵( 秘密鍵 と 公開鍵 )を生成する。ssh-keygen コマンドのオプションについて。

ssh-keygen を実行すると、公開鍵と、秘密鍵を生成します。
生成した鍵のうち、公開鍵をサーバーに登録(ユーザーフォルダ/.ssh/authorized_keys に内容を記入)することで、暗号鍵認証による接続が可能になります。

具体的には、下図の様な構成になっていれば、鍵認証が成功します。

※公開鍵とauthorized_keys が「同じ」というのは、 authorized_keys の中にユーザーの生成した公開鍵の内容と同じ記述のものが含まれるというニュアンスです。

サーバーに公開鍵を登録するには。

クライアントで生成した「鍵」をサーバーに登録する方法は、接続するクライアントと、接続先のOS との組み合わせによって、使用するコマンドが異なります。

接続先OS の種類
Linux windows
クライアント
Linux
ssh-copy-id <ユーザー名>@<サーバー名> ssh <ユーザー名>@<サーバー名> “mkdir .ssh”
scp <公開鍵> <ユーザー名>@<サーバー名> :/Users/ <ユーザー名> /.ssh/authorized_keys

Windows 10
Windows Server 2016
Windows Server 2019
cat <公開鍵> | ssh <ユーザー名>@<サーバーホスト名> “mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys” ssh <ユーザー名>@<サーバー名> “mkdir .ssh”
scp <公開鍵> <ユーザー名>@<サーバー名> :/Users/ <ユーザー名> /.ssh/authorized_keys

iPhone
メールで公開鍵を自分の端末に転送し、代理でサーバーに登録する。 メールで公開鍵を自分の端末に転送し、代理でサーバーに登録する。

公開鍵を サーバーに登録する際、
クライアントとサーバーが、Linux 同士なら「ssh-copy-id」コマンドが便利です。

Windows がクライアントの場合、ssh-copy-id コマンドが使えないので、疑似的なssh-copy-id を実施します。

■ Raspberry Pi OS でSSH 接続を有効にする。

WindowsServer へ鍵認証 SSH 接続を設定する場合、公開鍵の登録はどのように行っても大丈夫ですが、
コンフィグを一部編集する必要があります。これは2019 でも2016 でも同じでした。

iPhone から鍵認証を使い、Raspberry Pi へ SSH接続 してみました。

■ iPhone iOS 標準の「ショートカット」アプリ でSSHキー(暗号鍵認証方式)を使い SSH 接続する。

ssh-agent を使用すると、秘密鍵の情報をログイン先でも保持することができるらしい。

■ manページ  — SSH-AGENT

便利な SSH の機能

scp でファイル転送

OpenSSH で使えます。ちょっとしたファイルのアップロードやその反対もできました。
WindowsServer で公開鍵を登録する時なんかにも重宝します。

scp "C:\Users\unimoni\img\IMG_3100.JPG" uniuni@beccou-server:/home/uniuni

ローカルのファイルをRaspberry Pi へコピーできた。

■ scp コマンドについて。ssh 接続でファイルを転送する。Linux と Windows の場合。

SSH でポート転送

「-L」オプションを使うと、SSH 接続しつつ、サーバーの任意のポートをローカルポートに転送できます。
しかも、ファイアウォールを通過できます。

ssh -L <ローカルポート>:<リモート先ホスト>:<リモート先ポート> <リモート先でのユーザー名>@<リモート先ホスト>

例:サーバー「beccou-sever」のユーザー「uniuni」にSSH 接続し、リモート先の3389 ポートをローカルの60000 ポートへ転送する。 (ファイアウォールを通過できる。)

ssh -L 60000:beccou-server:3389 uniuni@beccou-server

余談ですが、ssh -L 60000:localhost:3389 uniuni@beccou-server とする場合があります。
フォーマットからみると間違っている気もしますが、インターネット経由でポートフォワードを使う場合、前半のリモート先サーバーが相手側からみた値になる感じです。

【インターネット経由】SSH ポートフォワード +リモートデスクトップ接続する。

AWS のドキュメントでも出てくる書き方です。

VNC を使用して GUI に接続する

ポートが転送できているか検証。

ローカルポートの60000 番を指定して、リモートデスクトップ接続してみる。
※転送した「3389」はリモートデスクトップ接続用のポート。
 なお、XRDP というLinux でもリモートデスクトップ接続できる拡張機能をインストールしてあります。

テスト環境のススメ

というわけで、
OpenSSH クライアントをインストールしたら、早速SSH 接続してみましょう。

とはいえ、何処へSSH 接続するの?。。。ですよね^^;

下記に案を上げてみました。どれもオススメです。

VM

 メモリとCPU が余っているなら、VM でLinux を構築。

ちなみに私のVM 環境では、
・Linux(CentOS 7)
  CPU:1スレッド、メモリ:4GB、ハードディスク:30GB(SSD) で 特にストレスなし 。
・WindowsServer 2016/2019
   CPU:2スレッド、メモリ:8GB、ハードディスク:100GB(SSD) で特にストレスなし。
となっております。

VM の構築については下記参照ください。

サーバー

 WindowsServer を持っているならWindowsServer にSSH サーバーを構築。
VM にWindowsServer 構築してもいいですよね。

Linux

 Linux を持っているならLinux。

Paspberry Pi

 持っているならラズパイ。

■ Raspberry Pi OS でSSH 接続を有効にする。

AWS

 クラウドに興味があって、クレジットカードを持っているならAWS。

まとめ

VM での構築なら、端末が問題なければ、基本無料で作れます。
AWS もSSH 接続するくらいの端末であれば、無料(1年間のみ)で構築できますが、、、
きっと課金したくなります^^。

参考サイト:

https://nxmnpg.lemoda.net/ja/1/ssh

https://nxmnpg.lemoda.net/ja/1/ssh-agent

(Visited 46,284 times, 3 visits today)
タグ:

「Windows OS で SSH 接続する場合の手順をまとめました。
【Windows Server 2016、2019、Windows 10】」への2件のフィードバック

  1. ピンバック: 【インターネット経由】SSH ポートフォワード +リモートデスクトップ接続する。 - .zapping

  2. ピンバック: Windows 系OS で、リモートシャットダウンを設定する。 – .zapping

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です