2018年6月27日水曜日

Windowsで始める初めてのSSH

Windows 10 Fall Creaters Updateでもベータ版が、インストールすることができましたが、April 2018 Update(1803)から、ついにWindowsでもSSHクライアントが標準搭載されるようになりました。(SSHサーバーは、後述する簡単なインストール作業が必要です。)

以前から気になっていたので、SSHを触ってみました。

SSHとは

sshは、SSHクライアントで入力したコマンドが、暗号化された通信経路を通ってサーバーに伝わりSSHサーバー(SSHD)がコマンドを実行します。

クライアントとサーバーの認証方式としては公開鍵認証が使われます。(もちろん、パスワード認証もできますが、セキュリティレベルは低くなります。)

WindowsではSSHの環境を構成するサービスとして次の2つがあります。
ssh-agent(OpenSSH Authentication Agent)
初期状態:無効 
ssh-agent 公開鍵認証用の秘密鍵のパスフレーズの管理サービス

sshd(OpenSSH SSH Server)
初期状態:手動
SSHのサーバー機能を提供するサービス(OpenSSHサーバーをインストールすると追加される。)


SSHで接続する

コマンドライン(cmd.exe)で次のコマンドを入力することで、SSHDに接続することができる。コマンド実行後、指定したユーザーのパスワードを入力すれば接続できる。

 SSH  サーバーのユーザー@サーバー名
※初回接続時にサーバーの身元を表すキーを登録するか聞かれるメッセージが表示される。

サーバーのユーザー
サーバーのOSにログインできるアカウントでドメイン部分は次のように省略される。
省略した結果、重複した場合は、ローカルユーザーが優先される。

 マイクロソフトアカウント(例:aaa@outlook.jp) → aaa
 ドメインユーザー(例:aaa@company.co.jp)aaa
ローカルユーザー(例:aaa)aaa


サーバー名
サーバーのホスト名でもIPでもどちらでも構わない


OpenSSH サーバー(sshd)のインストール

①設定アプリから「OpenSSHサーバー」を選択する。

②SSHDサービスが待ち受ける22番ポートをファイアウォールの例外に追加する。
netsh advfirewall firewall add rule name="sshd" dir=in action=allow protocol=TCP localport=20022 profile=private


③SSHDサービスを開始する。
net start sshd
sc start sshd
sc config sshd start= Auto

sshdをインストールしてもSSHDサービスは自動で開始しないため、インストールしただけでは、他のSSHクライアントから、勝手に接続されることはない。

④SSHDの状態確認
試しに自分自身で接続してみる。
ssh localhost

SSHDサービスの状態確認
sc qc sshd
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: sshd
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 3   DEMAND_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\System32\OpenSSH\sshd.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : OpenSSH SSH Server
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

OpenSSH サーバー(sshd)の各種ファイルの場所

C:\ProgramData\ssh\sshd_config
SSHDサーバーの設定ファイル。ログも同じ階層にある。

C:\Windows\System32\OpenSSH\sshd_config_default
設定ファイルの初期値ファイル。同じ階層にsshd.exeの実態もある。

C:\Users\ユーザー名\.ssh\known_hosts
SSHクライアントが過去に接続したことがあるSSHDサーバーのホストキーの一覧

OpenSSH サーバー(sshd)のセキュリティを強化する設定

SSHの歴史は古く過去との互換性のため、初期値は比較的セキュリティレベルが低いため、状況に合わせてsshd_config修正する。sshd_configファイル変更後は、SSHDサーバーを再起動すれば設定が反映される。

Protocol 2
プロトコルバージョン1にしか対応しないSSHクライアントはほぼ存在しないため、2に限定する。

PermitRootLogin no
root ログインの禁止
WindowsのSSHDサーバーでは、最初からサーバーのOSにログインできるアカウントで認証されるので、rootログインは不要


PermitEmptyPasswords no
空のパスワードユーザのリモートログインを拒否 

AllowUsers foo hoge fuga
接続ユーザを制限(例では、foo、hoge、fugaの3ユーザー

Port 22000
ポート番号22には、攻撃のターゲットになりやすいため

ClientAliveInterval 300
ClientAliveCountMax 0
アイドル状態(無応答状態)が指定した時間を過ぎると「Write failed: Broken pipe 」と表示しログアウトする。

パスワード認証禁止(公開鍵認証のみにする。)
1接続あたりの最大認証回数の制限

scpについて

SCPは、内部でSSHを使ってファイルを転送するコマンドです。
転送元ファイルはscpコマンドを実行したマシンになります。「転送元ファイルに転送元ユーザー@転送元サーバー」を記載すれば、転送元もリモートのサーバーにすることもできます。

 scp   転送元ファイル   転送先ユーザー@転送先サーバー:C:/foo/転送ファイル.txt


ファイルパスの区切りは「\」ではなく「/」にした方がよいです。sshdサーバーがwindows以外の時は「/」にしないとエラーにはならないがファイルが作られないという不思議な状態になることがあります。

転送先ファイルは、常に上書きされます。


SSH接続時のエラーの対処

Host key verification failed
SSHDサーバーのホストキーが、以前SSHクライアントが接続したときに保存したキーと異なっているため、SSHDサーバーのなりすまし防止のため発生したエラー

通常は次のコマンドで更新するのですが、Windows環境では「Updating known_hosts is not supported in Windows yet.」エラーとなり、ホストキーの書き換えができない。

ssh-keygen -R ルーターIP

SSH接続時のエラーメッセージ中にある通り次のエラーメッセージ部分に記載された「known_hosts」ファイルを直接修正する。(エラーメッセージ中のパスは、\マークが2重になっているので1つに書き直す。)

Add correct host key in C:\\Users\\ユーザー名/.ssh/known_hosts to get rid of this message.


参考

プロトコルバージョンを2に限定 root ログインの禁止 パスワード方式の許可/禁止 接続ユーザを制限 最大試行回数を制限
http://www14.plala.or.jp/campus-note/vine_linux/server_ssh/sshd_config.html

OpenSSHサーバーがWindows10に正式にやってきた(April 2018 Update/1803) | Webセキュリティの小部屋
https://www.websec-room.com/2018/05/12/2933

SSHサーバへ接続出来ない・遅い時の原因と対処法 | 俺的備忘録 〜なんかいろいろ〜
https://orebibou.com/2014/12/ssh%E3%82%B5%E3%83%BC%E3%83%90%E3%81%B8%E6%8E%A5%E7%B6%9A%E5%87%BA%E6%9D%A5%E3%81%AA%E3%81%84%E3%83%BB%E9%81%85%E3%81%84%E6%99%82%E3%81%AE%E5%8E%9F%E5%9B%A0%E3%81%A8%E5%AF%BE%E5%87%A6%E6%B3%95/

SSH接続エラー回避方法:.ssh/known_hostsから特定のホストを削除する/削除しないで対処する3つの方法
https://qiita.com/grgrjnjn/items/8ca33b64ea0406e12938

0 件のコメント:

コメントを投稿