- 投稿日:2019-10-01T22:46:50+09:00
YubiKeyでMacからUbuntuにSSH接続する
MacからYubiKeyを使用してUbuntuへSSH接続する手順をまとめる。
環境
- macOS Mojave
- Yubikey 5C: Firmware 5.2.4
- yubico-piv-tool: 1.7.0
- Ubuntu 16.04.3 LTS
必要なツールを入れる
- https://www.yubico.com/products/services-software/download/smart-card-drivers-tools/
- ダウンロードして適当な場所へ置き、PATHを通す
brew install opensc
YubikeyをMacに接続
挙動を確認。接続に失敗しているとエラーが出る。
yubico-piv-tool -a status
PIN, PUK, Management Keyを変更・登録
Yubikeyを安全に使用するためにPIN等を独自のものに変更する必要がある。
GUIのYubikey Managerを使うとやりやすい。デフォルトPIN/PUK
- PIN: 123456
- PUK: 12345678
CLIでやる場合
# PIN yubico-piv-tool -a change-pin -P 123456 # PUK yubico-piv-tool -a change-puk -P 12345678 # Management Keyを生成(48桁の英数字。ほんとはもっとちゃんと作るべき) date | sha256sum | cut -c 1-48 # Management Keyを登録 yubico-piv-tool -a set-mgm-key公開鍵の準備
# 秘密鍵を生成しPEMファイルを書き出す yubico-piv-tool -s 9a -a generate -o id_rsa.pem # 自己証明書を作成 yubico-piv-tool -a verify-pin -a selfsign-certificate -s 9a -S "/CN=SSH key/" -i public.pem -o cert.pem # 証明書をインポート(失敗する場合はGUIのYubikey Managerを使う) yubico-piv-tool -a import-certificate -s 9a -i cert.pem # OpenSSH形式の公開鍵を書き出す ssh-keygen -D opensc-pkcs11.so > id_rsa.pubその後、
id_rsa.pub
をサーバのauthorized_keys
へ登録する。SSH接続
以下で接続できることを確認。途中、先ほど登録したPINを入力する。
ssh -I opensc-pkcs11.so ubuntu@xx.xx.xx.xx
さらに、YubikeyをMacから外して、接続ができないことを確認しておく。
~/.ssh/config の設定
Host TargetHostName HostName xx.xx.xx.xx User ubuntu PKCS11Provider opensc-pkcs11.so備考
- YubiKeyで秘密鍵を生成することで、一切YubiKeyの外に秘密鍵を出さずに公開鍵認証によるSSHが実現可能
- MacがYubiKeyを認識しない場合は何度か抜き差しすると認識する場合がある
- 投稿日:2019-10-01T04:30:58+09:00
ファイルの文字コード変換
- 投稿日:2019-10-01T01:06:09+09:00
macOSでPerlを有効にする【macOS10.14】
一部手間取ったところがあったので、これも備忘。
Webアプリケーション用に使いたいので、主にhttps.confの編集に尽きます。1. Perlのインストール...?
MojaveにもPerlはプリインストールされていますが、C言語で書かれたPerlモジュールはセキュリティ上の理由でインストールに失敗してしまうとのこと。
しかし今回はまずPerlをいじることが目的の為、プリインストールのPerlを使用します。
Perlのバージョンは$perl -c
で確認できます。
macOS10.14.6ではPerl 5.18.4とのこと。パスを確認したい場合は
$which perl
で確認できます。
プリインストールされているPerlの場合は/usr/bin/perl
かと思います。2. https.confの編集
続いて、httpd.confを編集します。
$sudo -s vi /etc/apache2/httpd.conf
でhttpd.confを開きます。もしmacOSデフォルトのapacheではなく、自信でインストールしている場合はインストール先のhttpd.confを開きます。以降、行番号がわかっているととても便利なので、ファイルを開いたらエスケープモードの状態で
:set number
と入力して行番号を出しておきます。
2.1 LoadModuleの有効化
デフォルトではコメントアウトされている行のコメントアウトを外して有効化します。
LoadModuleは68行目あたりから始まります。(使用環境によって行数は変わります)・165行目付近
LoadModule cgi_module libexec/apache2/mod_cgi.so
・174行目付近
LoadModule userdir_module libexec/apache2/mod_userdir.so
・176行目付近
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
・179行目付近
LoadModule perl_module libexec/apache2/mod_perl.so
2.2 DocumentRootの指定
245行目付近にあるDocumentRootを設定する。
自信がWebページとして公開する場所を指定すればよい。
今回はデフォルトの/Library/WebServer/Documentsをそのまま使用。
<Directory "/Library/WebServer/Documents>
から
</Directory>
の間、259行目付近にある
Options FollowSymLinks Multiviews
の末尾に「ExecCGI」を追記。
Options FollowSymLinks Multiviews ExecCGI
とする2.3 MIMEの設定
406行目付近にあるmime_moduleの設定をして、.cgiや.plがwebコンテンツとして認識されるようにする。
・437行目付近
AddHandler cgi-script .cgi
のコメントアウトを外し、末尾に .plを追記。
拡張子を.cgiで統一する場合はコメントアウトを外すだけでも可。2.4 ホームディレクトリの設定
ユーザのホームディレトリ設定を有効にする。
・510行目付近
Include /private/etc/apache2/extra/httpd-userdir.conf
のコメントアウトを外す。以上でhttpd.confの設定は完了。
ファイルを保存したらapacheを再起動する。
sudo -s apachectl restart
3. ブラウザで表示してみる
簡単なHello Worldを表示するファイルを作成。
hello.pl#!/usr/bin/perl print("Hello World!");このファイルをhttpd.confで指定したDocumentRootに置きます。
その後ブラウザでhttp://localhost/hello.pl
にアクセス。画像のように表示されたら設定完了です。
4. 思った通りに表示されない...
Hello World!と表示されなかった場合、2通りの表示がでるかと思います。
4.1 ソースコードがそのまま表示される
httpd.confの設定が間違っているとブラウザにはソースコードがそのまま表示されてしまいます。
もう一度httpd.confを見直す必要があります。4.2 Internal Server Errorと表示される
画像のような表示になってしまった場合。よくある原因が
ソースコードのファイル、もしくはそのファイルが格納されているフォルダのアクセス権が違う
場合です。
その場合は
$sudo -s chmod 755 xxx
でアクセス権を変更してあげてください。もう1つの可能性として、ソースコードの記述内容が違う
ということもあります
print "Content-Type: text/html\n\n";
の一文が記載されていないと、こちらもInternal Server Errorの原因となります。
ソースコードを見直して、書いていないようであれば追記して、ブラウザを読み込み直してみてください