Windows Tips

WSL の Ubuntu 18.04 で ssh-agent がおかしくなったので対応しました

投稿日:2019年2月13日 更新日:

先日「WSL の Ubuntu 16.04 LTS を 18.04 LTS にアップグレードする」という記事を書きましたが、どうやら WSL の Ubuntu 18.04 LTS では、ssh-agent コマンドがうまく動かないようですので対応方法を紹介します。

1. 現状確認

WSL として Ubuntu 18.04 LTS を導入しています(16.04 LTS からアップグレードしました)。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

2. 症状

(1) ssh-agent を開始します。

$ exec ssh-agent /bin/bash

(2) 秘密鍵を登録します。

$ ssh-add

(3) どこかのリモートホスト(登録した秘密鍵を使っているホスト)に ssh で接続します。

$ ssh xxxx

(4) 接続を終了します。

(5) 秘密鍵が登録されたままになっているか確認します。

$ ssh-add -L
Error connecting to agent: Connection refused

なぜか、確認できません。

実際、再度 ssh でリモーホストに接続しようとしても秘密鍵が自動的に適用されません。

3. 原因

調査してみると、以下の情報が見つかりました。

どうやら WSL に問題があるようで、Windows 10 を バージョン 1809 にアップグレードすれば直るようです。

4. 対応手順

ここでは、Windows 10 が 1803 のままでも ssh-agent が問題なく使えるための方法を紹介します。

以下の手順は、全てターミナルエミュレータ上で行います。

(1) 一時作業ディレクトリに移動します。

$ cd ~/tmp/

(2) 少し古いバージョンの openssh-client アプリケーションをダウンロードします。

$ wget http://mirrors.kernel.org/ubuntu/pool/main/o/openssh/openssh-client_7.2p2-4ubuntu2.7_amd64.deb

(3) この .deb ファイルの内容を、~/local/src/deb に展開します。

$ dpkg -x openssh-client_7.2p2-4ubuntu2.7_amd64.deb ~/local/src/deb
  • ~/local/src ディレクトリがなければ作成しておいてください。しかし、ここは別のパスでもよいです。
  • 今後 ssh-agent コマンドを使いたい場合は、展開した中に含まれている ~/local/src/deb/usr/bin/ssh-agent コマンドを使います。

次の手順(4)では、この ~/local/src/deb/usr/bin/ssh-agent をエイリアスに登録して使えるようにします。

(4) ~/.bashrc ファイルに以下を記述します。

if [[ `uname -a` =~ Linux && `uname -a` =~ Microsoft ]]; then
  alias ssh-agent-start='exec ~/local/src/deb/usr/bin/ssh-agent /bin/bash' 
fi
  • 1行目(と3行目)は WSL の環境を判別しているだけですのでなくてもよいです。
  • 2行目では、今回導入した ssh-agent コマンドを使ったエイリアスを登録しています。
  • ssh-agent コマンドを使う代わりに、このエイリアスを使うことになります。

5. ssh-agent を使う

以下のように ssh-agent を使います。

(1) 以下のエイリアスを実行して ssh-agent を開始します。

$ ssh-agent-start

(2) 秘密鍵を登録します。

$ ssh-add

(3) ssh 接続します。

$ ssh xxxx
  • 登録した秘密鍵が自動的に使用されます。

6. 今後

Windows 10 を 1809 に更新した場合は、エイリアスを以下のように変更します。

if [[ `uname -a` =~ Linux && `uname -a` =~ Microsoft ]]; then
  alias ssh-agent-start='exec ssh-agent /bin/bash' 
fi
  • システムにインストールされた ssh-agent コマンドを使うように、パスを変えただけです。
  • もちろんこのエイリアスを使わず、ssh-agent コマンドをそのまま使ってもよいです。

6. おわりに

Windows 10 のバージョンを更新すると、こういった地味な問題が修正されるという利点がありますが、更新によって別の致命的な問題が起きる場合もありますので、明示的に更新しない方が安全です。

Windows 10 の更新プログラム自体も改善されていきますし、お使いの PC で問題が起きないと判断されれば自動的に更新が適用されます。逆に言うと、自動的に更新されない場合は、その PC で更新すると何か問題が発生するという判断がなされている可能性があるのです。

そのため、まだ バージョン 1803 をお使いの場合は 無理に Windows 10 を更新するのではなく、今回紹介した対応を行うことをお勧めします。

2019年3月13日 追記

なぜか今日から ssh-agent を使って ssh 接続すると、Windows 10 がクラッシュ (BSOD) するようになってしまいました。ssh コマンド単体で使えば問題ありません。
環境は Windows 10 v1803 + Ubuntu 18.04 TLS です。

停止コード:SYSTEM SERVICE EXCEPTION
失敗した内容:LXCORE.SYS

対応しました → WSL から Windows 10 の ssh-agent (OpenSSH) を利用する

OpenSSH

【SSH】ssh-agent の使い方

2018.06.15
WSL

WSL の Ubuntu 16.04 LTS を 18.04 LTS にアップグレードする

2019.02.08

📂-Windows Tips

執筆者:labo


  1. hrys より:

    ドンピシャで助かりました。ありがとうございます!

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Windows

Windows 10 Creators Update でのコントロールパネルについて

Windows 10 Creators Update 適用後は、Windowsキー + X (スタートメニューのアイコンを右クリックでも可)で表示されるクイックメニューから「コントロールパネル」が削除 …

Windows

Windows には Sysinternals Suite を導入しておくと便利です

目次1. Sysinternals Suite とは?2. Sysinternals Suite の導入3. Sysinternals Suite を利用する4. コマンド(ツール)の種類5. おわり …

docker

WSL から Docker Desktop の docker.exe が普通に実行できました

Docker Desktop の docker.exe が、WSL から普通に実行できたというお話です。

Windows

CubeICE をインストールする手順(余計なアプリケーションは除外して)

CubeICE のインストール手順について説明します。

WSL

【WSL】パスのフォーマットを変換する wslpath コマンドの使い方

目次1. はじめに2. wslpath コマンドオプション-a オプション-u オプション-w オプション-m オプション3. WSL を Windows Terminal で利用する場合4. おわり …