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

クリップボードの履歴管理アプリケーション CLCL の使い方

目次1. CLCL とは?2. インストール3. 基本的な使い方4. 設定[履歴]タブ[メニュー]タブ[ビューア]タブ[動作]タブ[形式]タブ[フィルタ]タブ[ウィンドウ]タブ[キー]タブ[ツール]タ …

Windows

【Windows】アプリケーションが開いている(ロックしている)ファイルを調べる方法

【Windows】プロセスが開いている(ロックしている)ファイルを調べる方法について説明します。

Windows

【Windows 10】ファイル・フォルダ削除時に確認メッセージを表示する

Windows を触っていて、意図せずファイルやフォルダを削除したことはないでしょうか? 私はあります。 通常 ファイル・フォルダを削除するとゴミ箱に残るのでまだよいですが、外付けストレージ内のファイ …

Windows

【Windows】重いアプリケーション(ソフトウェア)の優先度を低くして、他の作業を快適に行う

目次はじめにアプリケーションの優先度を落とす手順(1) タスクマネージャーを起動する(2) 重いアプリケーション(タスク)を探す(3) 目的のアプリケーション(タスク)の優先度を低くするまとめ はじめ …

Windows

明示的に Windows 10 のバージョンを上げる(Windows 10 更新アシスタントを使う)

Windows 10 の新しいバージョンがリリースされると、Windows 10 がインストールされた世界中のパソコンに対して順次適用(更新)されていきます。割と長い期間を掛けて適用していくため、人に …