2022/03/14追記
WSL2上のUbuntuで同様の設定を行った内容を別記事にしました。
2019/04/13 更新
Windows10 バージョン1809 (October 2018 Update)で再インストールしたので、それに合わせて記事を見直しました。
前回はWindows Subsytem for Linux (WSL)に導入したDebian GNU/Linuxでターミナル多重化ソフト(byobu + screen)を設定してみました。
これで使い勝手はほぼ本物のLinuxと同じになってきたのですが、若干動きがもっさりしているように思います。
遅い理由が使用しているターミナルソフトのせいかわからないですが、SSHでつなげて実績のあるターミナルソフト(PuTTY)を使ってみたいと思います。
SSHとPuTTY
SSH(Secure Shell)とはLinuxをはじめとするUnix系のシステムに安全にリモートで接続するための仕組み(プロトコル)です。
WindowsからLinuxに接続する場合に標準的に使われるのがこのSSHです。
WindowsでSSHを使ってLinuxに接続するためには、専用のクライアントソフトを使用します。
私の場合はいつもPuTTYと呼ばれるフリーソフトの日本語対応版を使っています。
WSLのLinuxも同じLinuxでですので、今回もPuTTYを利用します。上記のページからダウンロードして7zファイルを展開しておきましょう。なお7zファイルは7-Zipで展開できます。
SSHサーバのインストール
それではWSLで作業をしていきます。
まずはSHHサーバとしてOpenSSHを導入します。
$ sudo apt-get install openssh-server
私の場合は依存しているパッケージと合わせて24個のパッケージがインストールされました。
コマンド一発でインストールできるので簡単です。
SSHサーバの設定
SSHサーバ(OpenSSH)をインストールしたら設定して行きます。
基本的にはデフォルトのままでも運用できますが、安全のため接続はローカル(=WSLを動かしているWindows10)からだけに限定しておきましょう。
/etc/ssh/sshd_configの下記の2行を変更します。
#ListenAddress 0.0.0.0 #ListenAddress ::
↓↓↓
ListenAddress 127.0.0.1 ListenAddress ::1
sshd_configを変更したらOpenSSH serverを再起動します。
$ sudo service ssh restart
Windowsセキュリティの警告が表示される場合は、プライベートネットアークでの通信を許可しておきます。
SSHクライアント(PuTTY)の設定
つづいてダウンロードしたPuTTYを起動します。実行はputty.exeをダブルクリックするだけです。
最初にPuTTYの設定画面が開くのでホスト名に「127.0.0.1」を入力します。IPv6を使う場合はホスト名は「::1」です。
そして接続タイプが「SSH」であることを確認して「開く」を選択します。
これでPuTTYがWSLのSSHサーバに接続しに行きます。
初回は次のようなメッセージが表示されるので「はい」を選択します。
これはPuTTYが知らないSSHサーバに接続したことを示しています。
2回目の接続で表示される場合は、SSHサーバがすり替わっている可能性があるので注意してください。
これで次のような画面に切り替わるはずです。
あとはWSLで作成したユーザ名とパスワードを入力してログインします。
ログインに成功したらシェル画面になります。
あとはこの画面でWSLの操作をすることができます。
SSHで接続したときは「.bash_profile」が実行されるので、.bash_profileにbyobuを起動するように設定しておけば、PuTTYの画面で複数のセションを切り替えて使うことができます。
byobuの設定については下記を参照してください。
SSH接続を自動化する
SSHは鍵認証方式を設定すると、ユーザ名・パスワードを入力することなく接続することができます。
設定手順は次のようになります。
- SSHサーバの鍵認証方式を有効にする
- Windows上で公開鍵・秘密鍵にペアを作成する
- 公開鍵をWSL上のLinuxにコピーする
- コピーした公開鍵をSSHの認証ファイルに追加する
- PuTTYで公開鍵認証を使う設定を行う
となります。
順々に説明していきます。
SSHサーバの鍵認証方式を有効にする
WSL上の作業になります。
/etc/ssh/sshd_configの下記の行を変更します(先頭の「#」を削除します)。
#PubkeyAuthentication yes
↓↓↓
PubkeyAuthentication yes
同様に下記の行の先頭の「#」も削除します。
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
↓↓↓
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
sshd_configを変更したらOpenSSH serverを再起動します。
$ sudo service ssh restart
Windows上で公開鍵・秘密鍵ペアを作成する
PuTTYに付属していたPuTTYgen(puttygen.exe)を使用します。PuTTYgenを実行すると次のような画面が現れます。
公開鍵・秘密鍵のペアを作成する場合は、「生成」ボタンを押します。
「生成」ボタンを押したらキーの生成が始まりますので、「鍵」のエリアの上でマウスを適当に動かしましょう。マウスの動きを使ってkey必要な乱数を生成しているようです。
Keyの生成が完了すると次のような画面になります。
コメントはこのキーを利用するクライアント(Windowsマシン)の名前などにしておくとよいでしょう。
生成した秘密鍵を安全な場所でのみ利用するでしたらパスフレーズは空欄のままでも構いませんが、そうでない場合は安全のため入力しておいた方がよいと思います。もちろん確認用のパスフレーズの欄にも同じパスフレーズを入力しておきます。
コメントとパスフレーズの設定が終わったら、「秘密鍵を保存」で秘密鍵をファイルに保存します。ここではprivate.ppkとして保存したとします。
最後にOpenSSH用の公開鍵(赤枠で囲った部分のテキスト)をすべてテキストファイルにコピーしておきます。ここではデスクトップのpublickey.txtにコピーしたとします。
公開鍵をWSL上のLinuxにコピーする
ここはWSLでの作業になります。
WSLではWindowsのCドライブは「/mnt/c」以下に見えます。
この仕組みを使って先ほど作成したテキストファイル(デスクトップのpublickey.txt)をホームディレクトリにコピーします。
$ cp /mnt/c/Users/Windowsのユーザ名/Desktop/publickey.txt ~
コピーした公開鍵をSSHの認証ファイルに追加する
ここもWSLでの作業です。
先ほどコピーしたテキストファイル(publickey.txt)を、ホームディレクトリの.ssh/authorized_keyファイルに追記します。
なお、.sshディレクトリのがないときは、自分で作成する必要がありますが、パーミッションは「700」とする必要がある点に注意してください。
同様にauthorized_keysファイルのパーミッションは「600」とする必要があります。
$ mkdir -p .ssh $ chmod 700 .ssh $ cat publickey.txt >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
PuTTYで公開鍵認証を使う設定を行う
またWindows10での作業に戻ります。
PuTTYを起動して接続の設定画面で、左側のカテゴリで「接続→データ」を選択して「自動ログインのユーザ名」にWSLでのアカウント名を入力します。
つづいて左側のカテゴリで「接続→SSH→認証」と選択して、「認証のためのプライベートキーファイル」に先ほど保存した秘密鍵(private.ppk)を設定します。
最後に左側で「セッション」を選んで接続するホスト名を「127.0.0.1」として「開く」を選択します。
これでPuTTYのウィンドウが開き、自動的に設定したアカウントでログインできずはずです。
これでパスワードの入力などは不要でログインできることが確認できました。
PuTTYの設定の調整
パスワード無しでSSH接続できることを確認したら使いやすく設定していきましょう。
PuTTYは接続先の情報をセッション情報として保存してあとで呼び出すことができます。
まずセッション情報を作成します。ホスト名を「127.0.0.1」と入力した上で、セッション名を入力して「保存」を選択します。
セッション名は単なる目印なので「WSL」でもしておけば良いと思います。
基本的にはデフォルトの設定でも使えるのですが、PuTTYの設定を微調整していきます。
まず左側で「端末」→「ベル」を選んで、ベルのスタイルの設定で「なし (ベルは無効)」を選択しておきます。これはビーブ音がうるさいからです。
左側で「端末」→「高度な設定」を選んで、「アプリケーションキーパッドモードを無効にする」を選択します。これは、vi等のアプリケーションでテンキーを使えるようにするためです。
次に見た目を設定していきます。
左側で「ウィンドウ」を選択して、「桁」と「行」を変更します。昔はUnixのターミナル画面といえば横80文字というのが普通でしたが、ディスプレイの高解像度化が進んだ最近では狭すぎるので120ぐらいにすると良いでしょう。
「ウィンドウ」→「外観」ではフォントを設定しておきます。自分の好みに応じてフォントやフォントサイズを変更しましょう。
私は文字を見分けやすいMiguフォントを使っています。
「ウィンドウ」→「変換」では、リモートの文字セットで「UTF-8」を選択します。
つづいて接続に関する設定をしていきます。
「接続」→「データ」では、「自動ログインのユーザ名」にはWSLでのユーザ名を設定し、「端末タイプを表す文字列」には「putty-256color」を設定します。
あとは「接続」→「SSH」→「認証」で「認証のためのプライベートキーファイル」を設定してきます。
全ての設定が終わったら「セッション」に戻り、保存をします。
これで次回からはセッション一覧から、保存したWSLセッションをダブルクリックすればWSLのSSHサーバにつながるようになります。
もちろん鍵認証でログインは自動になります。
タスクバーのPuTTYを右クリックして作成したセッションをピン留めしておけば、さらに簡単にWSLにSSH接続することができます。
文字化け対策
上記の設定で日本語も問題なく使えるはずですが、使用しているbashの設定によっては日本語が文字化けしてしまうことがあるようです。
このような場合は、ホームディレクトリに「.inpurtc」というファイルを作成し、下記の三行を記載してください。
set input-meta on set convert-meta off set output-meta on
WSLへのSSH接続の課題
SSH接続をすることでWSLで使い慣れたターミナルソフトPuTTYを使うことができます。
しかし最大の課題はWSLのSSHサーバ(OpenSSH)は手動で起動することがある、ということです。
SSH接続する前に、別途WSLを起動して
$ sudo service ssh start
をしなければ行けません。
2018年4月のWindows10の大型アップデートでWSLでバックグラウンドプロセスが実行できるようになったので、このSSHサーバの開始作業は起動時の1回のみです。
1回SSHサーバを起動してしまえば、ターミナルのウィンドウは閉じても大丈夫です。
本来はWindows10の起動時に自動的にSSHサーバを実行したいのですが、ちょっと長くなりそうなので別の機会に試してみたいと思います。
2019/04/15追記
Windows10へのログオン時にWSLのSSHサーバを自動実行することができました。
まとめ
今回はWindows Subsystem for Linux上のDebianにSSHサーバを導入して、SSHで接続できるようにしました。
これで使い慣れたターミナルソフトPuTTYを使ってWSLを操作できるようになります。ただ、Windows10の起動時に1回だけ手動でSSHサーバを起動しておかなければ行けません。
自動的にSSHサーバを実行する方法があるようなので、それは別の機会に挑戦したいと思います。
次回はWSL上のDebian GNU/LinuxとLinuxファイルサーバ間でのファイル共有について検討します。
コメント