WindowsのOpenSSH

OpenSSH Security Testing Kick Offで、Windows用のOpenSSHがいい感じに出来たので試してねという記事が出たのでちょっと今更感はあるけど試してみた。
提供されているOpenSSHは記事の1行目のリンクhttps://github.com/PowerShell/Win32-OpenSSHで入手できる。プロジェクト名がWin32-OpenSSHなわりにWin64なのも用意してあるので「オイラ32bitアプリ嫌いなんだよね」という人も大丈夫。

今回はOpenSSH-Win64.zip (v0.0.13.0)を入手した。
解凍して適当なフォルダに置く。今回はc:/program files/opensshとした。

クライアントとして使用

PowerShellを起動する。

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Users\foobar> cd /"program files"/openssh
PS C:\program files\openssh> gci


    ディレクトリ: C:\program files\openssh

    
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/04/07     22:44           4197 install-sshd.ps1
-a----       2017/04/16     13:30         315392 scp.exe
-a----       2017/04/16     13:30         331264 sftp-server.exe
-a----       2017/04/16     13:30         381440 sftp.exe
-a----       2017/04/16     13:30        1909760 ssh-add.exe
-a----       2017/04/16     13:30        1964544 ssh-agent.exe
-a----       2017/04/16     13:30        2022912 ssh-keygen.exe
-a----       2017/04/16     13:30         132096 ssh-shellhost.exe
-a----       2017/04/16     13:30        2342400 ssh.exe
-a----       2017/04/16     13:30        2291712 sshd.exe
------       2017/04/07     22:44           3520 sshd_config
-a----       2017/02/07     10:23            567 uninstall-sshd.ps1


PS C:\program files\openssh> ./ssh foobar@192.168.31.219

gciはGet-ChildItemの省略形。UNIX系のOSでいうところのls, DOS系でいうところのdirっぽいもの。
sshで他のホストにログインしてみたところ、普通にログインできた。難しいところも不具合らしいものも見当たらなかった。

ただし、PowerShellの画面なので、それが圧倒的な使いにくさに繋がっている。20数年進化してないこの画面いいかげんどうにかして下さいよ。PowerShellリリース時に改修してりゃ良かったのに何で放置したんだろ。

拍子抜けするほど何も不具合無く動くのでこれで終わり。

サーバーとして使用

まずは管理者としてPowerShellを開く。

PowerShellを開く1
普通にスタートボタンを左クリックしてWまでスクロールし、Windows PowerShellを選択。Windows PowerShellのアイテムリストからWindows PowerShellを「右クリック」して「管理者として実行する」を左クリック。

PowerShellを開く2
Windows10 Creators Update以降はスタートボタンの右クリックで「Windows PowerShell (管理者)」でも行ける。

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:\Windows\system32> cd /"program files"/openssh
PS C:\program files\openssh> gci


    ディレクトリ: C:\program files\openssh


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/04/07     22:44           4197 install-sshd.ps1
-a----       2017/04/16     13:30         315392 scp.exe
-a----       2017/04/16     13:30         331264 sftp-server.exe
-a----       2017/04/16     13:30         381440 sftp.exe
-a----       2017/04/16     13:30        1909760 ssh-add.exe
-a----       2017/04/16     13:30        1964544 ssh-agent.exe
-a----       2017/04/16     13:30        2022912 ssh-keygen.exe
-a----       2017/04/16     13:30         132096 ssh-shellhost.exe
-a----       2017/04/16     13:30        2342400 ssh.exe
-a----       2017/04/16     13:30        2291712 sshd.exe
------       2017/04/07     22:44           3520 sshd_config
-a----       2017/02/07     10:23            567 uninstall-sshd.ps1


PS C:\program files\openssh> Set-ExecutionPolicy Unrestricted

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
PS C:\program files\openssh> ./install-sshd.ps1
[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
sshd and ssh-agent services successfully installed
PS C:\program files\openssh> Set-ExecutionPolicy  restricted

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
PS C:\program files\openssh>

インストール用のPowerShellスクリプトを実行したいので、先に実行ポリシーを「制限無し」に変更する。
インストールが終わったら実行ポリシーを「制限あり」に(忘れずに)戻す。何か理由があって通常時にunrestricted,restricted以外にしているということであればそれに戻す。

鍵ファイル作成

インストールは終わったけど鍵ファイルが無い状態なので作成する。作成するのはrsa, dsa, ecdsa, ed25519の4種類。
個別に作るということであれば例えばrsaなら以下。他の鍵ファイルの作成は下の緑字のrsaの部分をdsa, ecdsa, ed25519に代えるだけ。

PS C:\program files\openssh> ./ssh-keygen.exe -f ./ssh_host_rsa_key -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in .\ssh_host_rsa_key.
Your public key has been saved in .\ssh_host_rsa_key.pub.
The key fingerprint is:
SHA256:4KIxlWx0jDAG8AUiYJ6gUcluwXqXzUxSfpFUOQ7Z5ec gato@DESKTOP-0GU1CRT@DESKTOP-0GU1CRT
The key's randomart image is:
+---[RSA 2048]----+
|@**+o+o.o=.o.    |
|*=*=o+o +.+.     |
|.=..=Bo .o .. .  |
|. +oo.+o  .  o   |
| oo.. . S     E  |
|   + .           |
|  .              |
|                 |
|                 |
+----[SHA256]-----+
PS C:\program files\openssh>

個別に鍵ファイルを作成(更新)するのではなく一括でということであれば以下。

PS C:\program files\openssh> ./ssh-keygen -A
C:\program files\openssh\ssh-keygen.exe: generating new host keys: RSA DSA ECDSA ED25519
PS C:\program files\openssh> gci


    ディレクトリ: C:\program files\openssh


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2017/05/10     21:18                logs
-a----       2017/04/07     22:44           4197 install-sshd.ps1
-a----       2017/04/16     13:30         315392 scp.exe
-a----       2017/05/10     21:04          16384 secedit.jfm
-a----       2017/05/10     21:04        1048576 secedit.sdb
-a----       2017/04/16     13:30         331264 sftp-server.exe
-a----       2017/04/16     13:30         381440 sftp.exe
-a----       2017/04/16     13:30        1909760 ssh-add.exe
-a----       2017/04/16     13:30        1964544 ssh-agent.exe
-a----       2017/04/16     13:30        2022912 ssh-keygen.exe
-a----       2017/04/16     13:30         132096 ssh-shellhost.exe
-a----       2017/04/16     13:30        2342400 ssh.exe
-a----       2017/04/16     13:30        2291712 sshd.exe
------       2017/04/07     22:44           3520 sshd_config
-a----       2017/05/10     21:28            668 ssh_host_dsa_key
-a----       2017/05/10     21:28            627 ssh_host_dsa_key.pub
-a----       2017/05/10     21:28            227 ssh_host_ecdsa_key
-a----       2017/05/10     21:28            199 ssh_host_ecdsa_key.pub
-a----       2017/05/10     21:28            432 ssh_host_ed25519_key
-a----       2017/05/10     21:28            119 ssh_host_ed25519_key.pub
-a----       2017/05/10     21:28           1679 ssh_host_rsa_key
-a----       2017/05/10     21:28            419 ssh_host_rsa_key.pub
-a----       2017/02/07     10:23            567 uninstall-sshd.ps1



PS C:\program files\openssh>

sshdを起動

PS C:\program files\openssh> net start sshd

sshd サービスは正常に開始されました。

サービスとして登録済みのものを開始させるのでC:\program files\opensshから実行しなくてはならないということではない。
ここでサービスが正常に開始されずに System Error 5 が出ることがある。(後述)

サービス設定
インストール後の初期値は自動起動になっていないので自動起動させたい場合はサービスの設定でsshdを自動起動にする。
またはPowerShellから Set-Service sshd -StartupType Automatic

ファイアウォール ポップアップ
ファイアウォールのポップアップが出た場合はアクセスを許可する範囲の必要に応じて「プライベートネットワーク」と「パブリックネットワーク」にチェックをする。
[アクセスを許可する]を押す。

起動失敗
設定ファイルはsshd_configなので普通なら鍵ファイルのpathを変更してやれば正常に読み込んで起動してくれる筈だが、試した範囲では設定ファイル内のデフォルト値として書かれているpathのC:\etc\sshフォルダを作成してそこに鍵ファイルを置いてやらないとsshdがサービスとして起動してくれなかった。
上の画面が出る。(これは「サービス」からsshdを起動させた場合。PowerShellからsshdを起動させた場合はポップアップは出ずに文字でエラーが表示される)
ローカル コンピューターのsshdサービスを開始できません。エラー5: アクセスが拒否されました。
ところが一度正常に起動できてしまえば次からはC:\etc\sshが無くても動いちゃう?よく解らないなぁ・・・
別の原因がある?

他の端末からWindowsにsshでログインする場合、Windowsのローカルアカウントがあれば普通に ssh hoge@windows-pcのIPアドレス/ホスト名 でログインできる。ここは普通。マイクロソフトアカウントを使う場合、それがfoobar@example.comとすると ssh foobar@windows-pcのIPアドレス/ホスト名 で良いみたい。example.comどこ行った?

何かコマンドを実行した際に表示される内容が複数行の場合、普通なら1行ずつ改行されて「ズラズラ」っと表示される筈だけど、1行にひたすら上書きになることがある。プロンプトが出た後はまた正常に改行される。その発生条件に一貫性が無いので、ときどきのランダムなのかな?

関連記事:

UnixBench 自分の常用端末でも試してみた

PCでUnixBench

そういえばNanoPi NEO/NEO2をUnixBenchで測ったけど、普通のPCだとどれくらいだろうと思ったので見てみた。

Pentium N3700のPC

まずは常用している端末。これはPentium N3700 1.6GHzというCPUを搭載しているPC。以前にルーター用として購入したASRock N3700-ITXが退役したお下がり。人に言わすと「何?その苦行」レベルの性能だけど、ブラウザでネット見てメールしてエディタで何か書く程度だとほとんど不満なく使えてんるだけどねぇ。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: linux-uy1c: GNU/Linux
   OS: GNU/Linux -- 4.10.13-1-default -- #1 SMP PREEMPT Thu Apr 27 12:23:31 UTC 2017 (e5d11ce)
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Pentium(R) CPU N3700 @ 1.60GHz (3200.0 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 1: Intel(R) Pentium(R) CPU N3700 @ 1.60GHz (3201.8 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 2: Intel(R) Pentium(R) CPU N3700 @ 1.60GHz (3202.0 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   CPU 3: Intel(R) Pentium(R) CPU N3700 @ 1.60GHz (3202.0 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET, Intel virtualization
   09:28am  up   0:14,  1 user,  load average: 0.66, 0.41, 0.34; runlevel 5

------------------------------------------------------------------------
Benchmark Run: Wed May 10 2017 09:28:30 - 09:56:46
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       12634825.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2041.6 MWIPS (10.0 s, 7 samples)
Execl Throughput                               2246.9 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        288839.9 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           82246.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        693385.3 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1084798.9 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 142273.5 lps   (10.0 s, 7 samples)
Process Creation                               1282.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1570.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    681.3 lpm   (60.1 s, 2 samples)
System Call Overhead                        1465447.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   12634825.9   1082.7
Double-Precision Whetstone                       55.0       2041.6    371.2
Execl Throughput                                 43.0       2246.9    522.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     288839.9    729.4
File Copy 256 bufsize 500 maxblocks            1655.0      82246.9    497.0
File Copy 4096 bufsize 8000 maxblocks          5800.0     693385.3   1195.5
Pipe Throughput                               12440.0    1084798.9    872.0
Pipe-based Context Switching                   4000.0     142273.5    355.7
Process Creation                                126.0       1282.9    101.8
Shell Scripts (1 concurrent)                     42.4       1570.3    370.3
Shell Scripts (8 concurrent)                      6.0        681.3   1135.5
System Call Overhead                          15000.0    1465447.9    977.0
                                                                   ========
System Benchmarks Index Score                                         570.2

------------------------------------------------------------------------
Benchmark Run: Wed May 10 2017 09:56:46 - 10:25:27
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       47027951.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     8166.1 MWIPS (10.0 s, 7 samples)
Execl Throughput                               4708.4 lps   (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        378624.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          112926.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        844039.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             4188091.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 642523.3 lps   (10.0 s, 7 samples)
Process Creation                              10798.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5015.7 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    804.5 lpm   (60.1 s, 2 samples)
System Call Overhead                        4137375.5 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   47027951.1   4029.8
Double-Precision Whetstone                       55.0       8166.1   1484.7
Execl Throughput                                 43.0       4708.4   1095.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     378624.0    956.1
File Copy 256 bufsize 500 maxblocks            1655.0     112926.8    682.3
File Copy 4096 bufsize 8000 maxblocks          5800.0     844039.4   1455.2
Pipe Throughput                               12440.0    4188091.1   3366.6
Pipe-based Context Switching                   4000.0     642523.3   1606.3
Process Creation                                126.0      10798.0    857.0
Shell Scripts (1 concurrent)                     42.4       5015.7   1182.9
Shell Scripts (8 concurrent)                      6.0        804.5   1340.8
System Call Overhead                          15000.0    4137375.5   2758.3
                                                                   ========
System Benchmarks Index Score                                        1496.5

NanoPi NEO2のインデックススコア(前回)がシングルで298.9、4パラレルで771.2だったので単純にその数値で比較するとどちらも2倍に僅かに届かない程度。つまりオイラのPCはNanoPi NEO2の2倍速いんだぜってこと。

NanoPi NEO(無印)と比べてみた。
NanoPi NEOのインデックススコア(前回)がシングルで164.1パラレルで429.0だったので単純にその数値で比較するとどちらも共に3.48倍。つまりオイラのPCはNanoPi NEOの3.5倍も速いんだぜYeah!ってこと。

Core i3 2120TのPC

殆ど仕事らしい仕事をしていないサーバでも試してみた。
CPUはIntel Core i3-2120T 2.60GHz。これは、たしかSandy Bridge世代のi3の省電力版。要するにi3とか名乗っていてもドラクエの最初に出てくる敵のスライムなみのザコ。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: router.localnet: FreeBSD
   OS: FreeBSD -- 11.0-RELEASE-p9 -- FreeBSD 11.0-RELEASE-p9 #0: Tue Apr 11 08:48:40 UTC 2017     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
   Machine: amd64 (GENERIC)
   Language: en_US.utf8 (charmap=, collate=)
   CPU: no details available
   11:21AM  up 11 mins, 1 users, load averages: 0.20, 0.27, 0.18; runlevel 

------------------------------------------------------------------------
Benchmark Run: Wed May 10 2017 11:21:42 - 11:49:53
unknown CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       26643080.7 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     4328.3 MWIPS (9.6 s, 7 samples)
Execl Throughput                               2552.4 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        114162.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          100555.9 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks         59423.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1467491.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 210785.1 lps   (10.0 s, 7 samples)
Process Creation                               7921.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   7561.4 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1814.9 lpm   (60.0 s, 2 samples)
System Call Overhead                        1145558.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   26643080.7   2283.0
Double-Precision Whetstone                       55.0       4328.3    787.0
Execl Throughput                                 43.0       2552.4    593.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     114162.2    288.3
File Copy 256 bufsize 500 maxblocks            1655.0     100555.9    607.6
File Copy 4096 bufsize 8000 maxblocks          5800.0      59423.0    102.5
Pipe Throughput                               12440.0    1467491.2   1179.7
Pipe-based Context Switching                   4000.0     210785.1    527.0
Process Creation                                126.0       7921.7    628.7
Shell Scripts (1 concurrent)                     42.4       7561.4   1783.4
Shell Scripts (8 concurrent)                      6.0       1814.9   3024.9
System Call Overhead                          15000.0    1145558.2    763.7
                                                                   ========
System Benchmarks Index Score                                         748.3

------------------------------------------------------------------------
Benchmark Run: Wed May 10 2017 11:49:53 - 12:18:16
unknown CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       59413922.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    14660.3 MWIPS (9.8 s, 7 samples)
Execl Throughput                               6034.2 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks         99115.6 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           64172.5 KBps  (30.1 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks         83750.5 KBps  (30.1 s, 2 samples)
Pipe Throughput                             3397970.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 773384.7 lps   (10.0 s, 7 samples)
Process Creation                              18785.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  14593.1 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1867.0 lpm   (60.1 s, 2 samples)
System Call Overhead                        2839176.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   59413922.1   5091.2
Double-Precision Whetstone                       55.0      14660.3   2665.5
Execl Throughput                                 43.0       6034.2   1403.3
File Copy 1024 bufsize 2000 maxblocks          3960.0      99115.6    250.3
File Copy 256 bufsize 500 maxblocks            1655.0      64172.5    387.7
File Copy 4096 bufsize 8000 maxblocks          5800.0      83750.5    144.4
Pipe Throughput                               12440.0    3397970.8   2731.5
Pipe-based Context Switching                   4000.0     773384.7   1933.5
Process Creation                                126.0      18785.9   1490.9
Shell Scripts (1 concurrent)                     42.4      14593.1   3441.8
Shell Scripts (8 concurrent)                      6.0       1867.0   3111.7
System Call Overhead                          15000.0    2839176.8   1892.8
                                                                   ========
System Benchmarks Index Score                                        1367.0

全く期待してなかったけど本当に良くない。シングルでは748.3ということなのでN3700よりは流石にマシだけど、4パラレルだと1367ということでN3700の1496.5と比較して約9%低いスコアとなっている。
i3は2コア4スレッドなので4パラレルで良い筈。ちなみに2パラレルだとインデックススコアは1072.9だった。

もうちっとマシなCPUでも試したかったけど空いてなかったので今回はこれだけ。

っていうか俺のPCって15ドルのおもちゃの2倍の性能しかないのかよ・・・orz

関連記事:

Up