Help us understand the problem. What is going on with this article?

USBメモリをSSHの鍵にする方法

More than 1 year has passed since last update.

はじめに

amazonのAWS EC2では公開鍵暗号を使ったログインしかできずICカードがなければ秘密鍵のファイルを使ってログインするしかありません。そこでUSBメモリをICカードにエミュレーションするソフトを使う方法を説明します。

USBメモリは安全か?

秘密鍵のファイルでログインするよりは安全だと思います。通常、USBメモリを挿入するとマスストレージクラスのドライバが起動されてドライブとして利用できるようになるのですが、ICカードリーダのI/Fを持ったUSBメモリのドライバに変更しているので簡単にはコピーされない。万が一、コピーされても暗号化されているので安心です。

難点

市販される多くのUSBメモリに対応するためドライバに署名がついていません。このため64bit OSで利用する場合、一度、未署名ドライバをインストールできるようにOSを起動して、ドライバを交換した後、OSを再起動する必要があります。またWindows10の大型アップデートで自動的にドライバが元に戻る可能性もあるようです。

USBメモリをICカードにエミュレートするフリーソフト

myuTokenは、次のURLからダウンロードできます。
https://icanal.idletime.tokyo/myutoken/
EV SSL証明書を使っているのでブラウザのアドレスバーの左側にICANAL INC.と表示されます。2020年2月3日に切れるのでそれまで。ドメイン名 idletime.tokyoで覚えたほうがいいかもしれません。

Microsoft製 OpenSSH

Win32-OpenSSHは、次のURLからダウンロードできます。
https://github.com/PowerShell/Win32-OpenSSH
最新のバージョンでは確認していませんがv0.0.19.0(v0.0.17.0)で動作することを確認しています。デフォルトではPKCS#11が有効になっていないのでPKCS#11を有効にするdefineを設定してコンパイルしてください。
v0.0.17.0ではemacsの画面が崩れるバグがあるので次のパッチが必要です。
Qiita Microsoft製 OpenSSHでemacs

SSHの鍵とする証明書の発行

myuTokenでPKCS#12ボタンをクリックして自己署名証明書を発行します。発行した証明書をICカードにしたUSBメモリにインポートしてください。

USBメモリからSSHの公開鍵を取り出す

Win32-OpneSSHにssh-keygenコマンドがあるのでUSBメモリを挿入して次のようにします。
> ssh-keygen -D C:\Windows\System32\icardmodpk.dll

以下のような出力になると思います。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4+WjVMyClg+so//1TAHLML3H4xdzApLmEicNI6LRfMDDGWnPUjkxM5bXh6NCuDn1xwMNGDVdNrg3vCdGq7g1NAvzqfw9W0AnMMNVChUtGxn5Q9ls45GtnGIA1A31tT4tu66aaVUHBMSzoeGGXCfTtzAWEovLWSiCtAz30fz7lJIq+32EJLwnw9BbrvvALYvuPn89FK2TCr1D1TBP5zuhymZnQbXVn6sH6rw5XGWq8Ke+JT5d1qceuFpL2sKweTJqUU1qKRSo9HJ3Znawpt0pYf06bbBwkeQKx9ELy35pJt+MPKYXKNrVZSUMcg4GbYiiplcbPzV37XjWBaqgNBriF

amazonのEC2で利用する場合はコンソールから上記のファイルを、そのままインポートします。
あとはインスタンスを作成するところで、今、インポートした鍵を選択するだけで利用できます。
PowerShellを起動して
ssh -I C:\Windows\System32\icardmodpk.dll ec2-user@xxx.yyy.zzz.www
dllの名前を間違うと落ちるので気を付けてください。ログイン後、
export TERM=xterm
とするとemacsやviで画面が崩れません。.bashrcなどに記述しておきましょう。

SSHのサーバー側の設定

インターネットで検索すると、いろいろあると思うので省略します。簡単に説明すると
ホームで.sshを作成してパーミションを700にします。そこにssh-keygenで作ったファイルにWindows側のホスト名を追加してauthorized_keysというファイルを作成して.sshのフォルダにコピーします。パーミションは600にします。sshdデーモンの設定ファイルsshd_configで

AuthorizedKeysFile    .ssh/authorized_keys
PubkeyAuthentication yes

のような設定を行います。

SCPを使う

Windows側ユーザーフォルダの.sshの下にconfigファイルを作成します。
以下のような内容にします。

PKCS11Provider c:/windows/system32/icardmodpk.dll

おわりに

Windowsパソコンからamazonなどのサーバーに安全にSSHできる環境が整います。私は昨年、後半から今まで、とても快適に利用してきました。ちなみに私はUSBメモリではなく自社開発のICカードで使っています。セキュリティ以外はUSBメモリとあまり変わりません。

izuna
1999年RSA暗号で世界一の性能だった暗号プロセッサICF3をベースに8bit CPUにしたICF3-ZをApache License 2.0のライセンスで公開しました。8bit CPUでは暗号演算器ははずされています。
https://icf3z.idletime.tokyo/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした