Win10のcygwin上のSSHデーモンをWindowsのバッチで起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447780/9c873eed-6c2c-78d4-64e7-28cc561517b2.png)
**■目的**
Windows10にCygwinを複数入れて、複数のSSHデーモン(以降SSHデーモン→SSHDと記載)をマシン起動時に自動起動させる。

**■説明**
Cygwinを複数インストールして、WindowsのbatファイルでそれぞれのSSHDを読み込み、スタートアップに作ったbatファイルのショートカット登録して、Windows10起動後自動で起動させようという、普通はやらない事を敢えてやってみました。
<font color="red">※なお、今回はCygwinのパスをWindowsに通す必要はないです。</font>

その備忘録として以下に残しておきたいと思います。

**■事前準備**
まずは事前準備です。
Cygwinをインストールし、SSHDも入れましょう。

- Cygwinをインストールする
　<BR />※Cygwinのインストール方法は、google等でちょっと探せばたくさん出てくると思うので割愛します。
- CygwinでSSHDを導入する
　<details>Cygwinのsetup.exeを実行し、以下の図のように<font color="red">View</font>で<font color="red"><B>Category</B></font>を選択し、検索文字列に<font color="red"><B>ssh</B></font>と入れて、<font color="red">AllのNew欄</font>で<font color="red"><B>Install</B></font>を選択すれば、SSH接続に必要なプログラムをすべてインストールしてくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1447780/beb288db-7c16-d094-da3b-6444396a6738.png)</details>

**■SSHD設定**
それでは、SSHDの設定をしていきましょう。
手順としては以下の通りです。

1. それぞれのCygwin上で“_ssh-host-config_”を実行する
　<BR />※このコマンドを実行することで、/etc/配下にSSH関連のファイル(sshd_config等)が出力されます。
2. それぞれのCygwinのSSHD設定ファイル(sshd_config)でポート番号を設定する
　<details>複数のSSHDで同じポート番号を使用したり、複数のサービスで同じポート番号を使用することは<font color="red">できません</font>
そのため、インストールした全てのSSHDのポート番号が被らないようにする必要があります。
<BR />ポート番号の設定箇所はSSHDのバージョンによって異なりますが、Cygwinに限っては13行目辺りに有ると思います。
<BR />デフォルトではおそらく“#Port 22”と、“#”でコメントアウトされていると思うので、コメントアウトを外し、“Port _[設定したいポート番号]_”と書き換えます。</details>
3. sshd_configファイル内のPasswordAuthenticationを“yes”に設定する
　<details>これを設定しないと、パスワードによるSSH接続ができない場合があります。
この設定箇所もSSHDのバージョンによって異なりますが、これもcygwinに限れば57行目か68行目辺りにあると思います。
<BR />おそらくこの行もデフォルトでは“#”でコメントアウトされていると思うので、コメントアウトを外し、“PasswordAuthentication <font color="red">yes</font>”にします。</details>

**■SSHD自動起動用bat作成**
いよいよbatファイルの作成ですが、意外と簡単な方法で実現できました。
以下、batファイルの中身です。

```bat:SSHD自動起動.bat
@ echo off
cd /d d:
D:\cygwin32\bin\bash --login -c "cd /bin; /usr/sbin/sshd"

rem D:\cygwin64\bin\bash --login -c "cd /bin; /usr/sbin/sshd"

D:\RedHatCygwin\bin\bash --login -c "cd /bin; /usr/sbin/sshd"

cd /d c:
C:\Linux\bin\bash --login -c "cd /bin; /usr/sbin/sshd"
```
私の環境では、D:\cygwin32にCygwinの32bit版を、D:\cygwin64にCygwinの64bit版を、D:\RedHatCygwin\にRedHat社純正のCygwinをインストールしてあり、C:\Linux\にはDarkMoonXがインストールされています。

なお、DarkMoonXはWindowsStoreからインストールできます。
また、64bit版CygwinのSSHDは、Windowsのサービスに“CYGWIN cygsshd”という名前で既に登録されているので、“rem”でコメントアウトしています。
行ごと削除してしまってもいいのですが、何となく消すのが嫌だったのでコメントアウトに留めました。

以下に各コマンドの説明を記載します。

- 最初と途中に“cd”を使っていますが、これは対象の実行ファイルが今いるドライブ配下に無い場合、正常に動作してくれないことがあるので、念のため記載しています。
<BR />今回の場合は各Cygwinのbashが入っているドライブですね。
<details>
 - “cd /d ”の“/d”は、ドライブを跨いだフォルダの移動が出来るようになるオプションです。
書き方としては、“cd /d _[移動先フォルダ]_”になります。
上記ではd:やc:となっているのでもしかしたらこのオプションはいらないかもしれませんが、例えば今居るフォルダが“c:\Linux”で、そこから“d:\Cygwin32”に移動したい場合、この“/d”を省略してしまうとちゃんと移動してくれません。
- 3,5,7,10行目ではそれぞれ対象のCygwinでbashを読み込んでいます。
<details>
 - “bash --login -c”でCygwinのbashにログインしています。
 - “cd /bin;”で、Cygwin内の/binディレクトリに移動します。
<BR />※sshd起動に必要なdllファイル等は全てこの/binディレクトリに有ります。
<BR />ファイルパスを通していないので、SSHDを起動するのに必要なファイルが格納されているディレクトリに移動する必要があります。
 - “/usr/sbin/sshd”でSSHDを起動しています。
</details>
</details>

ちなみにWindowsXP辺りまでなら、これらの他にホロン社が発売したXonWindows3というものもあったのですが、こちらは確か最近のWindowsではちゃんと動作しないんですよね。

**■スタートメニューに登録する**
batファイルが出来上がりましたので、あとはマシン起動時に自動でbatファイルを読み込むだけです。
色々な方法が有るのかもしれませんが、今回はWindowsの“スタートアップ”にbatファイルのショートカットを作る方法を説明します。

1. WIndowsキー+Rキーで“ファイル名を指定して実行”ウィンドウを表示させる
2. 名前(<U>O</U>):欄に“_shell:startup_”と入力する
3. [Enter]キーを押下するか[OK]ボタンを左クリックする
4. 表示されたフォルダ内に、上記で作成したbatファイルのショートカットを作成する

以上で次回WIndows起動時に自動でbatファイルが読み込まれ、複数のSSHDがバックグラウンドで自動起動します。

**■参考にしたサイト**

| url | サイト名 | 備考 |
|-----------|-----------|-----------|
| https://bit.ly/3uBnezC | Markdown記法 チートシート | Qiitaでは初めての記事だったので、その書き方を勉強させていただきました。<BR />編集画面の右上にある<img src="https://github.com/althjp/ico/blob/a32728653d06187d3b4683b8bded3e4a41e0ed51/emoji/ASTEL/F2CA.gif?raw=true">のアイコンをクリックしたときに出てくる画面ですね。 |
| https://bit.ly/3evg5LK | cygwinを起動して特定のコマンドを実行するバッチファイルを作成する | batファイルからCygwin内のSSHDを起動するコマンドの書き方の参考にさせていただきました。 |
| http://bitly.oshiire.org/ | 短縮URL作成 | urlが長くなってしまうものが有ったので、こちらのサイトで短縮URLを生成させていただきました。 |

**■最後に**
ここまで読んでくれてありがとうございました。
一応動作を確認したPCの詳細を以下に記載します。

<table>
<tr><th>機種</th><td>TOSHIBA Dynabook T554/67KB</td></tr>
<tr><th>メモリ</th><td>8GB×2(16GB)</td></tr>
<tr><th>CPU</th><td>Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz   2.40 GHz</td></tr>
<tr><th>OS</th><td>Windows 10 Home(64bit)</td></tr>
<tr><th>バージョン</th><td>20H2</td></tr>
<tr><th>OSビルド</th><td>19042.964</td></tr>
<tr><th>エクスペリエンス</th><td>Windows Feature Experience Pack 120.2212.2020.0</td></tr>
</table>
今後も、『普通はやらないだろ。』というものを中心に記事にしていきたいと思っています。

---
後日、以下の環境でも動作確認しましたが、こちらはOSの初期化や修復インストールを繰り返したせいか、64bit版のCygwinのSSHDのサービスは登録されてませんでしたし、RedHatの公式サイトからダウンロードしたCygwin(以降：RH-CygWin)のSSHDの起動もしませんでした。

<table>
<tr><th>機種</th><td>lenovo ThinkPad T430</td></tr>
<tr><th>メモリ</th><td>12GB×1</td></tr>
<tr><th>CPU</th><td>Intel(R) Core(TM) Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz   2.60 GHz</td></tr>
<tr><th>OS</th><td>Windows 10 Home(64bit)</td></tr>
<tr><th>バージョン</th><td>Dev</td></tr>
<tr><th>OSビルド</th><td>21387.1</td></tr>
<tr><th>エクスペリエンス</th><td>Windows 10 Feature Experience Pack 321.13101.0.3</td></tr>
</table>

64bit版CygwinのSSHDについては、この記事に記載したソースコードのコメントアウトを解除し、binディレクトリの場所をインストール先と合わせたところ、問題無く起動しました。

RH-CygwinのSSHDが起動しないことについては、Cygwinのインストールの順番に問題があるのか、PCの機種やOSのバージョンによってうまくいかないものがあるのか分かりませんが、今後も時間が有れば、自分ができる範囲で<font color="silver">出来るだけお金は使わずに</font>いろいろ試してみたいと思います。