前回はWindows Subsytem for Linux (WSL2)に導入したUbuntu(20.04LTS)でターミナル多重化ソフト(byobu + screen)を設定してみました。
このとき使用したターミナルはWindows Terminalでした。Windows Terminalもよくできているのですが、やはりなれた従来のターミナルを利用したいという方も居ると思います。
そこで今回はSSHでつなげてPuTTYを使ってみたいと思います。
WSL1 + Debian GNU/Linuxで同様のことをした記事はこちらになります。
SSHとPuTTY
SSH(Secure Shell)とはLinuxをはじめとするUnix系のシステムに安全にリモートで接続するための仕組み(プロトコル)です。
WindowsからLinuxに接続する場合に標準的に使われるのがこのSSHです。
WindowsでSSHを使ってLinuxに接続するためには、専用のクライアントソフトを使用します。
私の場合はいつもPuTTYと呼ばれるフリーソフトの日本語対応版を使っています。
WSL2のLinuxへの接続にもPuTTYを利用します。上記のページからダウンロードして7zファイルを展開しておきましょう。なお7zファイルは7-Zipで展開できます。
SSHサーバのインストール
それではWSL2(Ubuntu)で作業をしていきます。
まずはSHHサーバとしてOpenSSHを導入します。
$ sudo apt-get install openssh-server
私の場合は既にopenssh-serverはインストールされていました。
SSHサーバの起動
SSHサーバ(OpenSSH)をインストールしたら起動しましょう。
$ sudo service ssh start
とりあえずデフォルトの設定のままでOKです。
SSHで接続する場合には通常はSSHサーバが動作しているLinuxのIPアドレス(あるはホスト名)が必要になります。
Ubuntuでは次のコマンドでIPアドレスを確認することができます。
$ ip addr show dev eth0
このコマンドでinetに続いて表示されるIPアドレスがWSL2のIPアドレスです。下記の例では「172.17.34.173」になります。
しかし、WSL2のIPアドレスはWSL2を起動するごとに変化するため、IPアドレスを使用して接続するのは困難です。
そこで、WSL2では、WSL2を起動しているWindowsからは「localhost」でWSL2側にアクセスできるようになっています。
SSHクライアントの設定
SSHクライアントは上でダウンロードしたPuTTYを利用しましが、事前に準備することがあります。
これはUbuntu 20.04LTSのSSHサーバのデフォルト設定ではパスワード認証を許可しておらず、公開鍵による認証が必要だからです。
Windows上で公開鍵・秘密鍵ペアを作成する
PuTTYに付属していたPuTTYgen(puttygen.exe)を使用します。PuTTYgenを実行すると次のような画面が現れます。
公開鍵・秘密鍵のペアを作成する場合は「生成」ボタンを押します。
「生成」ボタンを押したらキーの生成が始まりますので、「鍵」のエリアの上でマウスを適当に動かしましょう。マウスの動きを使ってkey必要な乱数を生成しているようです。
公開鍵・秘密鍵の生成が完了すると次のような画面になります。
「鍵のコメント」はこのキーを利用するクライアント(Windowsマシン)の名前などにしておくとよいでしょう。
生成した秘密鍵を安全な場所でのみ利用するでしたら「鍵のパスフレーズ」は空欄のままでも構いませんが、そうでない場合は安全のため入力しておいた方がよいと思います。もちろん「パスフレーズの確認」の欄にも同じパスフレーズを入力しておきます。
コメントとパスフレーズの設定が終わったら、「秘密鍵を保存」で秘密鍵をファイルに保存します。ここではprivate.ppkとして保存したとします。
最後にOpenSSH用の公開鍵(赤枠で囲った部分のテキスト)をすべてテキストファイルにコピーしておきます。ここではデスクトップのpublickey.txtにコピーしたとします。
公開鍵をWSL2(Ubuntu)にコピーする
ここはWSL2(Ubuntu)での作業になります。
WSLではWindowsのCドライブは「/mnt/c」以下に見えます。
この仕組みを使って先ほど作成したテキストファイル(デスクトップのpublickey.txt)をホームディレクトリにコピーします。
$ cp /mnt/c/Users/Windowsのユーザ名/Desktop/publickey.txt ~
コピーした公開鍵をSSHの認証ファイルに追加する
ここもWSL2(Ubuntu)での作業です。
先ほどコピーしたテキストファイル(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で公開鍵認証を使う設定を行う
またWindowsでの作業に戻ります。
PuTTY(putty.exe)を起動して接続の設定画面で、左側のカテゴリで「接続→データ」を選択して「自動ログインのユーザ名」にWSL2(Ubuntu)でのアカウント名を入力します。
つづいて左側のカテゴリで「接続→SSH→認証」と選択して、「認証のための秘密鍵ファイル」に先ほど保存した秘密鍵(private.ppk)を設定します。
最後に左側で「セッション」を選んで、接続するホスト名に「localhost」を入力します。
また、保存済みセッション一覧に適当な名前(Ubuntu@WSL2など)を入力して「保存」を選択します。
セッションとして保存しておくと、次回以降同じ設定を簡単に呼び出せるようになります。
SSHで接続!
ようやく接続です。
PuTTYを実行し、先ほど保存したセッションを読み込んだのち「開く」を選択しましょう。
これでPuTTYがWSL2のSSHサーバに接続しに行きます。初回は次のようなメッセージが表示されるので「受け入れる」を選択します。
これはPuTTYが知らないSSHサーバに接続したことを示しています。
「受け入れる」を選択すると、先ほど設定した公開鍵と秘密鍵による認証が行われ、ログインできるはずです。
前回の記事で紹介したbyobuを有効にしていれば、sshで接続した状態でもbyobuが使えます。
なおフォントなどが見にくいですが、これは後ほど調整します。
PuTTYの設定の調整
これで接続できるようになったわけですが、PuTTYのデフォルトのままだと使いにくいところがあるので、設定を調整していきましょう。
まずPuTTYの画面で保存してあるWSL2用のセッション情報を読み込んでおきます。
続いて左側で「端末」→「ベル」を選んで、ベルのならしかたの設定で「なし (ベルは無効)」を選択しておきます。これはビーブ音がうるさいからです。
次は左側で「端末」→「高度な設定」を選んで、「アプリケーションキーパッドモードを無効にする」を選択します。これは、vi等のアプリケーションでテンキーを使えるようにするためです。
次に見た目を設定していきます。
左側で「ウィンドウ」を選択して、「桁」と「行」を変更します。昔はUnixのターミナル画面といえば横80文字というのが普通でしたが、ディスプレイの高解像度化が進んだ最近では狭すぎるので120ぐらいにすると良いでしょう。
「ウィンドウ」→「外観」ではフォントを設定しておきます。自分の好みに応じてフォントやフォントサイズを変更しましょう。
私は文字を見分けやすいMiguフォントを使っています。
「ウィンドウ」→「変換」では、リモートの文字セットで「UTF-8」を選択します。
「接続」→「データ」では、「端末タイプを表す文字列」に「putty-256color」を設定します。
全ての設定が終わったら「セッション」に戻り、保存をします。
これで次回からは作成したセッションを使うと、今回設定した内容でPuTTYがSSH接続します。
タスクバーのPuTTYを右クリックして作成したセッションをピン留めしておけば、さらに簡単にWSL2にSSH接続することができます。
文字化け対策
上記の設定で日本語も問題なく使えるはずですが、使用しているbashの設定によっては日本語が文字化けしてしまうことがあるようです。
このような場合は、ホームディレクトリに「.inpurtc」というファイルを作成し、下記の三行を記載してください。
set input-meta on set convert-meta off set output-meta on
今回インストールしたUbuntu 20.04LTSでは特に問題が発生していないため、この設定は行っていません。
WSL2へのSSH接続の課題
SSH接続をすることでWSL2で使い慣れたターミナルソフトPuTTYを使うことができます。
しかし最大の課題はWSL2のSSHサーバ(OpenSSH)は手動で起動することがある、ということです。
SSH接続する前に、別途WSL2を起動して
$ sudo service ssh start
をしなければいけません。
WSL2はバックグランドで動作するので、このSSHサーバの起動は1回のみで、あとはターミナルのウィンドウは閉じて大丈夫です。
しかし、面倒なのでこの問題は別の機会に対策をしてみたいと思います。
まとめ
今回はWindows Subsystem for Linux 2上のUbuntuにSSHサーバを導入して、SSHで接続できるようにしました。
WSL2は起動毎にIPアドレスが変わってしまうという仕様なのですが、localhostを指定するとフォワーディングされるのでIPアドレスを気にせずにSSH接続することができます。
これで使い慣れたターミナルソフトPuTTYを使ってWSL2を操作できるようになります。ただ、手動でSSHサーバを起動しておく必要があるのが面倒な点です。
次回はNASによるネットワークドライブにWSL2からアクセスしてみたいと思います。
コメント