はじめに

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メモリとあまり変わりません。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.