2023/02/09(木)Windows 11のChromeで正確な位置情報を取得できるようにする
2023/02/09(木)Windows 11で既定の位置を設定出来ないのを解決する
2023/01/30(月)UbuntuでSSHとGPGキーのパスフレーズを記憶させる
投稿日:
毎回パスワードを聞かれるのは面倒なのでkeychainを使って記憶させる。
確認環境
WSL2
| Env | Ver |
|---|---|
| keychain | 2.8.5 |
| Ubuntu | 20.04.5 LTS |
実機
| Env | Ver |
|---|---|
| keychain | 2.8.5 |
| Ubuntu | 24.04.3 LTS |
手順
1. keychainのインストール
sudo apt install keychain
2. keychainの設定
.zshrcに次の行を追加。
keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>
GPG鍵のkeyidは以下で取得可能。
gpg --list-secret-keys --keyid-format=long
3. エージェント連携をシェル設定に書く
~/.keychain配下にホスト名でHOGE-shのようなファイルができているので、これを.zshrcから読み込む。内容的にはssh-agentとkeychainが疎通するための環境設定と思われる。
具体的には以下の内容を.zshrcに追記すればよい。
source $HOME/.keychain/`hostname`-sh
最終的な.zshrcの状態としては以下のようになっていればよい。
keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>
source $HOME/.keychain/`hostname`-sh
hostname-sh-gpgみたいなファイルも出来ているが私の環境ではこれを読み込むと上手く動かなかったので、このファイルは指定しないほうが良さそうに見えた。
4. パスフレーズをCUI側に出す
.zshrcに以下を追記するとCUI側に出るようになる。
export GPG_TTY=$(tty)
5. パスフレーズを記憶させる
gpg-agent.confに書く。
cat <<'EOF' | tee ~/.gnupg/gpg-agent.conf
###+++--- GPGConf ---+++###
default-cache-ttl 34560000
max-cache-ttl 34560000
EOF
トラブルシュート
GPGのキーが見つからないエラーが出る
- Warning: can't find DEADBEEF; skipping
上記が出た場合
~/.gnupg/gpg.confに対して以下の記述をすることで改善する。
keyid-format LONG
この設定をした後にkeychainに再ロードさせるには、gpg-agentを殺して.zshrcに書いたkeychainをもう一度実行するとうまくいく。
gpgconf --kill gpg-agent
keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>
GPGキーのパスフレーズのプロンプトがGUI側に出る
.zshrcに以下を追記するとCUI側に出るようになる。
export GPG_TTY=$(tty)
参考記事
更新履歴
- 2026-07-06: gpgキーが認識されないときに再履行する方法を追記
- 2026-06-04: パスフレーズをCUI側に出す方法と記憶させる方法を追記
- 2026-01-21: エージェントとの連携設定が漏れていたのを追記
- 2026-01-19: Ubuntu実機で確認したので、その結果を記事に反映し、記事を読みやすく改良
2023/01/25(水)CloudFrontで自宅サーバーを外部公開する
投稿日:
今回はwell-known portsが利用出来ない環境でも自宅サーバーを公開する手法を紹介します。
自宅サーバーにhttps://service.example.com/のようにポート指定なしのサブドメインでアクセスできるようにするのがゴールです。
構成
自宅サーバーの手前にCDNを挟み、CDNを経由して接続させるようにします。要するに手前にリバプロを生やしておくわけです。
前提
- Google Domainsを利用している
- ルートドメインを保有している
- AWSのアカウントがある
前準備
DNSレコードに次のドメインを作っておく
| 用途 | ドメイン | レコード | データ |
|---|---|---|---|
| CDN 用のドメイン | cdn.example.com | A | サーバーのIP |
| 公開用のドメイン | service.example.com | A | サーバーのIP |
自宅サーバーを公開可能な状態にする
叩き台程度ならserveを使うのが手っ取り早いですが、Node.jsでサーバー立てるのもありだと思います。今回は叩きなのでHTTPにしていますが本番運用するときはHTTPSにしましょう。
以下サンプル
const http = require('http');
const port = 12345;
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello world!');
console.log(req.headers.host, req.socket.remoteAddress);
});
server.listen(port, () => {
console.log(`Running at http://localhost:${port}`);
});
手順
- CloudFrontを開く
- 「ディストリビューションを作成」
- 「オリジンドメイン」に
cdn.example.comを設定 - 「プロトコル」を選ぶ
cdn.example.comの「ポート」を設定する- 設定までスクロール
- 「代替ドメイン名 (CNAME) - オプション」で「項目を追加」し
service.example.comを入力 - 「カスタムSSL証明書 - オプション」で「証明書をリクエスト」
- 「パブリック証明書をリクエスト」
- 「完全修飾ドメイン名」に
service.example.comを入力し「リクエスト」 - 「証明書を表示」
- DNSレコードに「CNAME名」で「CNAME値」を追加
- 「保留中の検証」が終わるのを待つ
- 「カスタムSSL証明書 - オプション」で作成した「ACM証明書」を選択
- 「ディストリビューションを作成」
service.example.comのDNSレコードをCNAMEにし、データを「ディストリビューションドメイン名」に変更https://service.example.com/にアクセスできればOK
参考資料
トラブルシュート
ディストリビューションを削除したい
- ディストリビューションの一覧で消したいのにチェック入れて無効化
- しばらく待つ
- 消したいのにチェック入れて削除
後書き
副次的効果ですがCDN挟んでキャッシュされてるお陰で連続アクセスしてもサーバーまでリクエスト来ないので感動しました。
CloudFrontには他にも様々な機能があるみたいなので活用できれば便利そうです。




