windowsにOpenSSHサーバを立てた
やったこと
- windows10の標準機能となったOpenSSHの有効化
- Windows Subsystem for Linux(WSL)のOpenSSHも使えるようにした
- VNCでMacやiPadからwindowsの画面を表示できるようにした
Jupyterサーバとして動く! ……はず!
環境
- Windows10 Home
- iPad Pro11
- MacBook Pro(Catalina)
ことの始まり
VRゲームに興味があって
比較的上位なGPUを積んだwindows機を購入した.
よくよく考えてみればまともなGPUがあるということは
ディープラーニングも捗ると気付いたため,
windowsにjupyterサーバを立てることにした.
ただ私はmacに慣れきっていてwindowsのゴミUIが操作しにくいため,
windowsのjupyterサーバにMacからデータを投げる方針とした.
実作業
PythonやTensorflow,Cudaの導入は特に難しいことはないため省略.
特にTensorflowのドキュメントが非常に分かりやすく素晴らしかった.
microsoftも見習え.
この記事を書いている2020年2月現在,
KerasがPython3.6までにしか対応していない.
このKerasが便利そうなのでPythonのバージョンは3.6をインストールした.
標準のOpenSSH
インストール
一応microsoftの分かりにくい公式ドキュメントに全部書いてある.
簡単で間違えようがない方法が分かりにくく平文で書いてあって,
おそらくPowershellを推すために,
とっつきにくい方法をダラダラと丁寧に書いてある.
GUI経由でwindowsの設定からインストールしてしまうのが吉.
初期設定
Powershellでのインストールは何をしているか少し分かりにくい一方で,
ファイアウォールや常駐サービス化の初期設定はPowershellの方が確実.
これら設定をGUIでポチポチ探していくのは私には辛かった…….
ドキュメントのコピペで放っておくとポート22を使用することになってしまうため,
sshd_configでポートを弄った後にでも他の設定を追加しておく.
詳細設定
何故公式はここまでしか載せていないのか.
SSH入れたらまずはsshd_config
弄ってポート変更とパスワード認証の禁止をするでしょ.
そしてsshd_config
の場所は公式には見当たらない.
というか日本語でこの点を明記してあるページもここ以外見つからない.
こちらの情報をありがたく拝謁すれば,
C:\ProgramData\ssh\sshd_config
にあると分かった.
そこで以下の設定を管理者権限で編集する.
#Port 22
→Port "他と被らないポート"
#PermitRootLogin without-password
→PermitRootLogin forced-commands-only
#MaxAuthTries 6
→MaxAuthTries 1
#MaxSessions 10
→MaxAuthSessions 2
#PubkeyAuthentication yes
→PubkeyAuthentication yes
#PermitEmptyPasswords no
→PermitEmptyPasswords no
Match Group administrators
の下のAuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
→AuthorizedKeysFile .ssh/authorized_keys
特に管理者ユーザで作業している場合,
最後を忘れると鍵認証方式での接続がいつまで経ってもできない.
続いて公開鍵の設定.
C:\Users\USERNAME\.ssh\authorized_keys
にSSHクライアントの公開鍵を記載する.
上で管理者グループの公開鍵の設定を変えなかった場合はそちらにも記載する.
以上の設定をしてからサービスなりコマンドラインなりからOpenSSHを再起動する.
他の端末から鍵認証方式でSSH接続できることが確認できたら
パスワード認証を完全に排除する.
再びsshd_config
に戻って
#PasswordAuthentication yes
→PasswordAuthentication no
としてパスワード認証を禁止してしまう.
WSLのOpenSSH
microsoft storeからUbuntuをインストールすれば後の設定はunix系そのもの.
……ではなかった.
wslではパーミッションの基本設定がwindows準拠で通常のunixと異なるため,
ただのubuntuと思って設定するとSSH接続できない .
(windowsにSSH接続してからwslなりubuntuなりbashなりで起動はできる)
wsl上のtmuxを使うつもりのため,一応直接wslに接続できるようにしておく.
パーミッションの設定
おとなしくこちらに従う.
パーミッション既定を変えるファイルにsudo service ssh restart
も一緒に仕込んでおけば
windowsを再起動してもこのファイルを実行するだけでsshdとパーミッションを戻せる.
OpenSSHの設定
パーミッションさえクリアしていればこのまま.
起動が確認できたら/etc/ssh/sshd_config
と
~/.ssh/authorized_keys
を編集してsshdを再起動.
VNCサーバ
Ultra VNCでも入れればよし.
iPadからの接続はJump Desktopが便利.
Macからはfinderで⌘+Kのサーバへ接続でvnc://windowsのip:5900
とすれば
windowsのデスクトップが表示できるはず.
MacでVNCクライアントをフルスクリーンにすると
magic trackpadのスワイプだけでMacとwindowsを切り替えられて便利.
感想
SSHサーバを立てたいまともな人間はwindowsやwslで誤魔化さずに
最初からlinux機を準備しているんだなあと感じるほどまともな情報が見当たらなかった.
出勤中の業務と在宅時のゲーム以外でwindowsを触る機会が減って精神衛生的にいい.
microsoftは機械翻訳&たらい回しのクソドキュメントを修正しろ.