a2 Tech blog

試したこと・調べたこと・感じたことを発信するITエンジニアの日記です。仕事とは直接関係ないけど興味あることを模索していきます。

Win32 OpenSSHがPermission deniedでつながらない場合の対処法

2017/05 中旬ぐらいにAzure上のWindows ServerにOpenSSHをインストールしてSSH Over HTTPで対象のサーバとSSHを確立して、SSHポート転送でRDPをフォワードするという方法の記事を書きました。同じような環境を作りたくて同じ手順で、再度構築したらはまってしまったので、備忘として残しておきます。

過去記事は下記です。過去記事も修正しておきたいのですが時間の都合でまだ直せてません。

ninna2.hatenablog.com

ちなみに今回設定したOpenSSHはv0.0.17.0です。7/3時点でのlatestバージョンです。

github.com

OpenSSHをインストールしたサーバはAzure上のWindows Server 2012 R2です。下段の方のサーバです。

f:id:ninna2:20170703022432p:plain

エラーの内容

エラーログ(C:\Program Files\OpenSSH-Win64\logs\sshd.log)には、このような形で、Permission deniedがたくさん出てしまいました。 ※インストーディレクトリは"C:\Program Files\OpenSSH-Win64"にしています。適時読み替えてください。

3104 16:39:27:518 Server listening on :: port 22.
3104 16:39:27:518 Server listening on 0.0.0.0 port 22.
3104 16:39:27:518 error: Couldn't create pid file "./sshd.pid": Permission denied
3536 16:42:27:595 error: Couldn't create pid file "./sshd.pid": Permission denied
3536 16:42:27:626 fatal: sshd_hostkey_sign: ssh_agent_sign failed: agent refused operation
3340 16:44:01:335 error: Couldn't create pid file "./sshd.pid": Permission denied
3340 16:44:01:351 fatal: sshd_hostkey_sign: ssh_agent_sign failed: agent refused operation
2344 16:46:21:231 error: Couldn't create pid file "./sshd.pid": Permission denied
2344 16:46:22:725 fatal: sshd_hostkey_sign: ssh_agent_sign failed: agent refused operation
3784 16:47:14:048 error: Couldn't create pid file "./sshd.pid": Permission denied
3784 16:47:14:079 fatal: sshd_hostkey_sign: ssh_agent_sign failed: agent refused operation
3104 16:48:14:703 Received signal 8; terminating.
2300 16:48:40:477 Server listening on :: port 22.
2300 16:48:40:477 Server listening on 0.0.0.0 port 22.
2300 16:48:40:477 error: Couldn't create pid file "./sshd.pid": Permission denied

権限が問題なんだと思って、ディレクトリの権限をフルコントロールにしてみたり、いろいろ試してみたけれど解消せず。 どうしたものかと悩みました。

マニュアルはちゃんと読むべし

結論から言うと、いろいろ調べてみたけど最終的にマニュアル(Wiki)の手順が変わってました。前回から1か月半ぐらいしか経っていなかったので前回の手順でやればいいやと思って同じ手順でやったのがダメでした。ソフトウェアのバージョンが上がったら、ちゃんとマニュアル読みましょう。

github.com

一応、Wiki読めば書いてありますが、簡単に手順を書いておきます。

OpenSSHのモジュールをダウンロードして解凍します。x64の場合は、OpenSSH-Win64.zip。 “C:\Program Files\OpenSSH-Win64"に展開してます。以下、その前提で記載してます。

環境変数(PATH)の設定をしておきます。私の場合は展開したディレクトリ"C:\Program Files\OpenSSH-Win64"を環境変数へ追加してます。

sshdのインストールを行なっていくのですが、インストースクリプトPowerShellファイル(.ps1)なのでPowerShellのポリシーを緩めます。下記のコマンドをPowerShellから実行します。PowerShellはAdministrator権限で起動してくださいね。

PS C:\> Set-ExecutionPolicy Unrestricted

そのあとにOpenSSHを配置したフォルダに移動し、インストースクリプト(install-sshd.ps1)を実行します。

PS C:\Program Files\OpenSSH-Win64> .\install-sshd.ps1

ちなみにWikiでは下記のコマンドを実行しています。どちらのコマンドでもできるのでお好きな方でよいかと思います。

powershell -ExecutionPolicy Bypass -File install-sshd.ps1

次に、SSH host-keyを生成します。

PS C:\Program Files\OpenSSH-Win64> .\ssh-keygen.exe -A

ここまでの手順は変わりません。次の手順が追加されてます。実行すると、"Repaired permissions"が行われるようです。

PS C:\Program Files\OpenSSH-Win64> .\FixHostFilePermissions.ps1 -Confirm:$false

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your
computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning
message. Do you want to run C:\Program Files\OpenSSH-Win64\FixHostFilePermissions.ps1?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D"): R

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your
computer. If you trust this script, use the Unblock-File cmdlet to allow the script to run without this warning
message. Do you want to run C:\Program Files\OpenSSH-Win64\OpenSSHUtils.psm1?
[D] Do not run  [R] Run once  [S] Suspend  [?] Help (default is "D"): R

[*] C:\Program Files\OpenSSH-Win64\sshd_config
Inheritance is removed from 'C:\Program Files\OpenSSH-Win64\sshd_config'.
'BUILTIN\Users' has no more access to 'C:\Program Files\OpenSSH-Win64\sshd_config'.
'APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES' has no more access to 'C:\Program Files\OpenSSH-Win64\sshd_conf
ig'.
'NT SERVICE\sshd' now has Read access to 'C:\Program Files\OpenSSH-Win64\sshd_config'.
      Repaired permissions

・・・省略・・・

  [*] C:\Program Files\OpenSSH-Win64\ssh_host_rsa_key.pub
Inheritance is removed from 'C:\Program Files\OpenSSH-Win64\ssh_host_rsa_key.pub'.
'BUILTIN\Users' now has Read access to 'C:\Program Files\OpenSSH-Win64\ssh_host_rsa_key.pub'.
'APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES' now has Read access to 'C:\Program Files\OpenSSH-Win64\ssh_host
_rsa_key.pub'.
'NT SERVICE\sshd' now has Read access to 'C:\Program Files\OpenSSH-Win64\ssh_host_rsa_key.pub'.
      Repaired permissions

   Done.

あとは、Firewallの設定と、スタートアップの設定をしたら無事完了です。

困ったときは、基本に立ち返り、マニュアルを読むべし。いい教訓になりました。