2017年12月17日日曜日

Bash on Ubuntu on WindowsにSSHでアクセスできるようにする

Windows10ではBash on Ubuntu on WindowsでUbuntuが使える。このUbuntuに他の端末からSSHで接続できるようにする。ただ、sshdの自動起動設定をしても機能しないので、How to run Ubuntu service on Windows (at startup)?を参考にVBScriptで自動起動させる。


環境


Windows10のBash on Ubuntu on Windows。Ubuntuのバージョンは16.04。



WindowsのSSHサービス無効


Windows10のSSH関連のサービス「SSH Server Broker」「SSH Server Proxy」を無効にする。


SSH鍵作成


今回はWindowsのTera Termで作成したSSH鍵を使う。SSH鍵の作り方はTera TermのヘルプSSH 接続を参照。公開鍵(id_rsa.pub)と秘密鍵(id_rsa)を作成しておく。


sshd設定


Bash on Ubuntu on Windowsでsshdの設定をする。sshdはインストール済みで、設定ファイルの2箇所を変更する。


UsePrivilegeSeparationをnoにする。
UsePrivilegeSeparation no 

以下の行のコメントを外す。
AuthorizedKeysFile      %h/.ssh/authorized_keys 


SSH公開鍵の保存


Bash on Ubuntu on Windowsのホームディレクトリ配下に.sshディレクトリを作成し、authorized_keysというファイルに公開鍵を保存する。


Tera Termで作成した公開鍵(id_rsa.pub)をWindowsのテキストエディタで開き、中身をコピーしてauthorized_keysにペーストして保存。保存したらパーミッションを変更しておく。



sshd自動起動設定


sshdの自動起動設定をしたいが、Bash on Ubuntu on Windowsでは自動起動の設定をしても機能しない。以下のような設定になっていても自動起動してくれない。


そこで、How to run Ubuntu service on Windows (at startup)?にあるように、VBScriptでsshdを起動させる。

Windowsで以下のVBScriptファイルを作成して、autostartssh.vbsなどの名前で保存する。


このままだとsudoコマンドでパスワードが必要なので、Bash on Ubuntu on Windowsのvisudoでsshd起動時のみパスワードなしで実行できるようにする。


以下の1行を追記(userはユーザー名)
user ALL = (root) NOPASSWD: /usr/sbin/sshd -D 

これでautostartssh.vbsをダブルクリックするだけでUbuntuのsshdが起動する。


ファイヤーウォール設定


WindowsのファイヤーウォールやセキュリティソフトでTCPの22番ポートを開放しておく。


SSH接続を試す


autostartssh.vbsをダブルクリックして、他のPCのTera Termから接続してみる。
接続時に「RSA/DSA/ECDSA/ED2551鍵を使う」を選択し、秘密鍵(id_rsa)を読み込む。パスフレーズはユーザーのログインパスワードでなく、SSH鍵作成時に設定したパスフレーズ。

あとは、タスクスケジューラでWindows起動時にautostartssh.vbsを実行させるだけだと思ったら、タスクスケジューラでautostartssh.vbsが実行されない。原因がわからないので、とりあえず、スタートアップへautostartssh.vbsのショートカットを追加して自動ログイン設定することで、sshdを自動起動させることにした。

0 件のコメント:

コメントを投稿