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

メールアドレスが公開されることはありません。

関連記事

docker

Windows 10 Home のための、Docker Toolbox をインストールして WSL から使う方法

Windows 10 Home に Docker を導入し、WSL を利用してインストールした Ubuntu から使う手順について説明します。 目次はじめにDocker Toolbox の仕組みと W …

タスクバー上のアプリケーションアイコンに数字を表示してくれる

7+ Taskbar Numberer を使って、タスクバーからのアプリ起動をラクにする

目次1. はじめに2. 7+ Taskbar Numberer の 使い方3. 7+ Taskbar Numberer の更新について(おまけ)2017年4月時点で公開していた導入手順説明動画 1. …

Windows

Windows 10 のスリープと休止状態を利用する

Windows 10 における「スリープ」と「休止状態」の違いについて説明します。

Windows

【Windows 10】エクスプローラーの「PC」と、「ドキュメント」や「ダウンロード」などの特別なフォルダーについて

目次1. エクスプローラー上に存在する「PC」2. フォルダーの場所を移動する3. [PC]と同階層にある [{ユーザー名}]4. フォルダー名について5. まとめ 1. エクスプローラー上に存在する …

Windows

Windows 10 でスクリーンショットを撮る方法(キャプチャ機能)

Windows 10 においてスクリーンショットを撮る(キャプチャする)方法について説明します。