20191001のMacに関する記事は3件です。

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

必要なツールを入れる

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を認識しない場合は何度か抜き差しすると認識する場合がある
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ファイルの文字コード変換

txtファイルなどの文字コードを変換するUNIX/LINUXコマンドに
nkfコマンドというのがある。

インストール

$ brew install nkf

使い方

文字コード判別

$ nkf -g example.txt

任意の文字コードに変換

option 変換先の文字コード
-w UTF-8コード
-j JISコード
-s Shift-JISコード
-e EUCコード

--in-placeを付けると、変換元のファイル自体を書き換えます。

(例)example.txtをUTF-8に変換
$ nkf -w --in-place example.txt
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOSでPerlを有効にする【macOS10.14】

一部手間取ったところがあったので、これも備忘。
Webアプリケーション用に使いたいので、主にhttps.confの編集に尽きます。

1. Perlのインストール...?

MojaveにもPerlはプリインストールされていますが、C言語で書かれたPerlモジュールはセキュリティ上の理由でインストールに失敗してしまうとのこと。
しかし今回はまずPerlをいじることが目的の為、プリインストールのPerlを使用します。
Perlのバージョンは  $perl -cで確認できます。
a.png
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と入力して行番号を出しておきます。
b.png

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にアクセス。

スクリーンショット 2019-10-01 0.58.52.png

画像のように表示されたら設定完了です。

4. 思った通りに表示されない...

Hello World!と表示されなかった場合、2通りの表示がでるかと思います。

4.1 ソースコードがそのまま表示される

httpd.confの設定が間違っているとブラウザにはソースコードがそのまま表示されてしまいます。
もう一度httpd.confを見直す必要があります。

4.2 Internal Server Errorと表示される

スクリーンショット 2019-10-01 0.47.00.png
画像のような表示になってしまった場合。よくある原因が
ソースコードのファイル、もしくはそのファイルが格納されているフォルダのアクセス権が違う
場合です。
その場合は
$sudo -s chmod 755 xxxでアクセス権を変更してあげてください。

もう1つの可能性として、ソースコードの記述内容が違う
ということもあります

print "Content-Type: text/html\n\n";
の一文が記載されていないと、こちらもInternal Server Errorの原因となります。
ソースコードを見直して、書いていないようであれば追記して、ブラウザを読み込み直してみてください

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む