opensc」タグアーカイブ

ssh-agentとpkcs11をmacOSXで使う

すごくわかりにくいタイトル

YubikeyにSSHの秘密鍵を入れて、ローカルのハードディスクに鍵は置かないといころまではうまく行った。つぎにあちこちのPCやらサーバから鍵を消しまくりたいのだが、接続した先のサーバから別のサーバに接続なんてケースはママある。ということでssh-agentの登場となるわけですが、ssh-agentにファイルとして存在していない鍵(Yubikeyのようなスマートカード)をどう追加するかという話。

ssh-add -s /usr/local/lib/opensc-pkcs11.so

これで行けることはわかっているんですが、Macだとどうしても動いてくれない。どうやらssh-agentのマニュアルを読むと-Pオプションで、信頼できるpkcsライブラリで指定するらしい。これがデフォルトだと/usr/lib*/*と、/usr/local/lib*/*になっているようで、上のopensc-pkcs11.soも問題ないじゃないかと思っていのだが、MacOSXの場合はHomebrewでopenscをインストールしており、上記のパッケージもシンボリックリンクでおいてあった。

-Pオプションにオリジナルの場所を追加しようとしたのだが、どうもうまく行かず、非常に安直なworkaroundだが、オリジナルをコピーして/usr/local/libにおいたらうまく動いた。

アップデートしたら動かなくなるかもしれないし、脆弱性があっても放置される可能性があるので、おすすめはできない。-Pオプションで解決したい。

Yubikey (スマートカード)に入れた秘密鍵を使ってSSHにログインする

ラノベのタイトルみたいになってしまった

すったもんだしてYubikeyにSSHの秘密鍵を入れるところまで行ったのだが、これを利用して、ローカルのハードディスクに秘密鍵を置かずに、SSHのログインを使用という話。クライアントはWindows,Mac,Linuxを想定している。
いままで、公開鍵暗号でのSSH接続ができていたことが前提。

Mac,Linux

Yubicoのページ( https://developers.yubico.com/PIV/Guides/SSH_with_PIV_and_PKCS11.html )のStep 4 からほぼそのままでいけた。

まずはOpenSCのインストール。Mac OSX の場合はhomebrewでインストールするのがよさ気。

brew install opensc

これだけでいける。インストール先は/usr/local/opt/openscになる。環境によっては、/usr/local/Cellar/openscになることもある。インストールされたディレクトリは以下のコマンドでも確認できる。

brew --prefix opensc

OSXはメジャーバージョンアップの際に/usr/localにものがあるとしくじる前科があるので若干心配だ。Linuxの場合は、それぞれのパッケージ管理ソフトに従う。

次に参考したページにはssh-keygenで公開鍵を取り出して、リモートホストのauthorized_keysに追加せよとあるが、今まで同じ鍵でサーバ運用していた場合は関係なし。

必要なのはpkcs11のライブラリの場所を調べてそいつがスマートカードを読み取れるかどうか。ちなみに手近のLinuxクライアントはVMware Player のDebianしかないのだが、VMのゲストOSがスマートカードを認識できないので確認できない。(no slotsというエラーが出る)

あとはsshコマンドを叩くときにIオプションでpkcs11ライブラリの場所を指定するだけ。

ssh -I /usr/local/opt/opensc/lib/opensc-pkcs11.so remotehost

こうするとYubikeyの中の秘密鍵を使ってセッションを確立します。しかしこれを毎回打つのは面倒なので、~/.ssh/configに記述しておきます。私の場合はこんな感じ。

Host hoge
        Hostname          hoge.example.jp
        Port              12345
        PKCS11Provider    /usr/local/opt/opensc/lib/opensc-pkcs11.so

 

4行目に書いてあるPKCS11Providerが追加されたところ。

Windows

WindowsのSSHクライアントといえば、TeratermかPuttyが思い浮かぶ。そんな人に手っ取り早いのが、Puttyの中に入っているPageantを使う方法。認証エージェントですが、スマートカード対応版があります。Puttyシリーズをスマートカード対応にしているPutty-CACというプロジェクトがあってバイナリを公開しています。

SSHサーバに接続するだけなら、Putty本体とTeratermでも使えるPageantをダウンロードするだけで大丈夫です。

Puttyそのものの使い方は割愛しますが、接続先ホストの設定でConnection-SSH-Certificationとすすみ、Attempt Certification Authentication にチェックを入れて、Set CAPI certで証明書を選び、PIN入力が出てくれば接続可能です。

同じようにpageantにも証明書を指定しておき、Teratermで接続する際にSSH認証で、pageantを使う、でPIN入力が出てくれば接続可能です。

pageantはOS起動時に起動させれば良いと思います。

その他

それにしてもECDSAの鍵を使えないのが痛い。。。