DebianをWindows10上で動かす その5: SSHで接続する

Debian
スポンサーリンク

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と呼ばれるフリーソフトの日本語対応版を使っています。

PuTTYrv (PuTTY-ranvis) - Ranvis software

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セキュリティの警告が表示される場合は、プライベートネットアークでの通信を許可しておきます。

security

SSHクライアント(PuTTY)の設定

つづいてダウンロードしたPuTTYを起動します。実行はputty.exeをダブルクリックするだけです。

最初にPuTTYの設定画面が開くのでホスト名に「127.0.0.1」を入力します。IPv6を使う場合はホスト名は「::1」です。

そして接続タイプが「SSH」であることを確認して「開く」を選択します。

puttyでの接続先の設定

これでPuTTYがWSLのSSHサーバに接続しに行きます。

初回は次のようなメッセージが表示されるので「はい」を選択します。

サーバのフィンガープリントの表示

これはPuTTYが知らないSSHサーバに接続したことを示しています。

2回目の接続で表示される場合は、SSHサーバがすり替わっている可能性があるので注意してください。

これで次のような画面に切り替わるはずです。

SSHへのログイン

あとはWSLで作成したユーザ名とパスワードを入力してログインします。

ログインに成功したらシェル画面になります。

SSHでのログイン後

あとはこの画面でWSLの操作をすることができます。

SSHで接続したときは「.bash_profile」が実行されるので、.bash_profileにbyobuを起動するように設定しておけば、PuTTYの画面で複数のセションを切り替えて使うことができます。

byobuの設定については下記を参照してください。

DebianをWindows10上で動かす その4: ターミナルを多重化する
今回はWindows Subsystem for Linux (WSL)の使い勝手を向上すべく、byobuとscreenを導入してターミナルを多重化してみます。 本物のLinuxで設定するのに比べ、若干追加の設定が必要ですが、使い勝手は本物のLinuxとほぼ同様です。若干動作が遅いのが気になる点かもしれません。

SSH接続を自動化する

SSHは鍵認証方式を設定すると、ユーザ名・パスワードを入力することなく接続することができます。

設定手順は次のようになります。

  1. SSHサーバの鍵認証方式を有効にする
  2. Windows上で公開鍵・秘密鍵にペアを作成する
  3. 公開鍵をWSL上のLinuxにコピーする
  4. コピーした公開鍵をSSHの認証ファイルに追加する
  5. 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を実行すると次のような画面が現れます。

公開鍵・秘密鍵のペアを作成する場合は、「生成」ボタンを押します。

putty-1

「生成」ボタンを押したらキーの生成が始まりますので、「鍵」のエリアの上でマウスを適当に動かしましょう。マウスの動きを使って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フォントを使っています。

Miguフォント : M+とIPAの合成フォント

「ウィンドウ」→「変換」では、リモートの文字セットで「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サーバを実行したいのですが、ちょっと長くなりそうなので別の機会に試してみたいと思います。

まとめ

今回はWindows Subsystem for Linux上のDebianにSSHサーバを導入して、SSHで接続できるようにしました。

これで使い慣れたターミナルソフトPuTTYを使ってWSLを操作できるようになります。ただ、Windows10の起動時に1回だけ手動でSSHサーバを起動しておかなければ行けません。

自動的にSSHサーバを実行する方法があるようなので、それは別の機会に挑戦したいと思います。

次回はWSL上のDebian GNU/LinuxとLinuxファイルサーバ間でのファイル共有について検討します。

コメント

タイトルとURLをコピーしました