「バックアップを外部ストレージに保存するとき、暗号化しておきたい」
このような場面で頼りになるのが gpg コマンドです。GPG(GNU Privacy Guard)は OpenPGP 規格を実装した暗号化ツールで、RHEL・Ubuntu・CentOS など主要ディストリビューションに標準搭載されています。
この記事では、gpg コマンドを使ったファイルの暗号化・復号の手順を解説します。公開鍵暗号方式と共通鍵(パスフレーズ)暗号方式の両方をカバーし、鍵の生成・エクスポート・インポート、そしてバックアップ運用での実践例まで紹介します。
この記事のポイント
・gpg -c でパスフレーズによる簡易暗号化ができる
・gpg --gen-key で公開鍵ペアを生成し相手と安全に通信できる
・--armor オプションで ASCII 形式の可搬性のある暗号文を出力できる
・鍵のエクスポート・インポートで複数サーバー間の運用に対応できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
gpg とは何か?なぜ現場で使われるのか
GPG(GNU Privacy Guard)は、1991年に Phil Zimmermann が発明した PGP(Pretty Good Privacy)のオープンソース実装です。非常に長い歴史を持ちながら、現在も現場で広く使われています。理由は明確で、標準搭載・依存なし・実績ありの三拍子が揃っているからです。
現場でよく見かける用途はこのあたりです:
・バックアップファイルの暗号化(外部ストレージや S3 への保存前)
・設定ファイルやパスワードファイルのリポジトリ管理(git-crypt の代替)
・スクリプト間での秘密情報の受け渡し
・パッケージ署名の検証(yum/apt が内部で使用している)
RHEL 9.4 / Ubuntu 24.04 LTS で動作確認済みです。
gpg コマンドの基本構文
# 基本構文 gpg [オプション] [ファイル] # バージョン確認 gpg --version
・-c / --symmetric:パスフレーズによる共通鍵暗号化
・-e / --encrypt:受信者の公開鍵で暗号化
・-d / --decrypt:復号(秘密鍵またはパスフレーズで)
・-s / --sign:デジタル署名
・--verify:署名の検証
・-a / --armor:ASCII アーマー形式で出力(メール添付などに便利)
・--gen-key:鍵ペアの生成
・--list-keys:公開鍵の一覧表示
・--list-secret-keys:秘密鍵の一覧表示
・--export:公開鍵をエクスポート
・--import:公開鍵をインポート
パスフレーズによる共通鍵暗号化(最も手軽)
サーバー間の公開鍵交換が不要な場面では、パスフレーズで暗号化する -c オプションが手軽です。1. ファイルを暗号化する
# backup.tar.gz をパスフレーズで暗号化 # 実行するとパスフレーズの入力プロンプトが表示される gpg -c backup.tar.gz # 結果: backup.tar.gz.gpg が作成される ls -lh backup.tar.gz* -rw-r--r-- 1 tomohiro tomohiro 4.2M May 8 10:15 backup.tar.gz -rw-r--r-- 1 tomohiro tomohiro 4.2M May 8 10:15 backup.tar.gz.gpg
.gpg 拡張子が付きます。2. ASCII アーマー形式で暗号化する
メール本文にコピーペーストしたい場合や、テキストとして扱いたい場合は--armor(-a)を付けます。# ASCII 形式(テキスト)で暗号化 gpg -c --armor secret.txt # 結果: secret.txt.asc が作成される cat secret.txt.asc -----BEGIN PGP MESSAGE----- jA0EBwMCWzlHsEqtgJH/0kMBUULzYp3/...(暗号化データ) -----END PGP MESSAGE-----
3. 暗号化ファイルを復号する
# backup.tar.gz.gpg を復号(パスフレーズ入力が求められる) gpg -d backup.tar.gz.gpg > backup_restored.tar.gz # または --output でファイル名を明示 gpg --output backup_restored.tar.gz --decrypt backup.tar.gz.gpg # 復号後のファイルを確認 ls -lh backup_restored.tar.gz -rw-r--r-- 1 tomohiro tomohiro 4.2M May 8 10:22 backup_restored.tar.gz
公開鍵暗号方式による暗号化
複数のサーバーやメンバー間で安全にファイルをやり取りする場合は、公開鍵暗号方式を使います。「自分の公開鍵を相手に渡し、相手が公開鍵で暗号化したファイルを秘密鍵で復号する」という仕組みです。1. 鍵ペアを生成する
# 対話形式で鍵ペアを生成 gpg --gen-key # 出力例(RHEL 9.4 / Ubuntu 24.04 LTS) GnuPG needs to construct a user ID to identify your key. Real name: Tomohiro Miyazaki Email address: tomohiro@example.com You selected this USER-ID: "Tomohiro Miyazaki
" Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
2. 生成した鍵を確認する
# 公開鍵一覧 gpg --list-keys /home/tomohiro/.gnupg/pubring.kbx --------------------------------- pub ed25519 2026-05-08 [SC] [expires: 2029-05-07] A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0 uid [ultimate] Tomohiro Miyazaki
sub cv25519 2026-05-08 [E] [expires: 2029-05-07] # 秘密鍵一覧 gpg --list-secret-keys /home/tomohiro/.gnupg/pubring.kbx --------------------------------- sec ed25519 2026-05-08 [SC] [expires: 2029-05-07] A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0 uid [ultimate] Tomohiro Miyazaki ssb cv25519 2026-05-08 [E] [expires: 2029-05-07]
3. 公開鍵をエクスポートして相手に渡す
# 公開鍵を ASCII アーマー形式でエクスポート gpg --armor --export tomohiro@example.com > my-public-key.asc # 内容確認 head -3 my-public-key.asc -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEZhXX...
4. 相手の公開鍵をインポートする
# 受け取った公開鍵をインポート gpg --import partner-public-key.asc # インポート確認 gpg: key XXXXXXXXX: public key "Partner Name
" imported gpg: Total number processed: 1 gpg: imported: 1 # インポート後の鍵一覧確認 gpg --list-keys
5. 相手の公開鍵でファイルを暗号化する
# 相手のメールアドレスを指定して暗号化 # -r で受信者(recipient)を指定 gpg -e -r partner@example.com report.pdf # ASCII 形式で暗号化(メール添付に便利) gpg -e --armor -r partner@example.com report.pdf # 結果: report.pdf.gpg(または report.pdf.asc)が作成される ls -lh report.pdf* -rw-r--r-- 1 tomohiro tomohiro 1.2M May 8 10:35 report.pdf -rw-r--r-- 1 tomohiro tomohiro 1.3M May 8 10:35 report.pdf.gpg
6. 自分の秘密鍵でファイルを復号する
# 秘密鍵のパスフレーズを入力して復号 gpg --output report_decrypted.pdf --decrypt report.pdf.gpg gpg: encrypted with cv25519 key, ID XXXXXXXXX, created 2026-05-08 "Tomohiro Miyazaki
" # 復号されたファイルを確認 ls -lh report_decrypted.pdf -rw-r--r-- 1 tomohiro tomohiro 1.2M May 8 10:40 report_decrypted.pdf
応用・実務Tips
シェルスクリプトからパスフレーズなしで復号する(バッチ処理)
cron スクリプトなど対話が難しい環境では、パスフレーズをファイルに保存して--batch と --passphrase-file を使います。# パスフレーズを安全な場所に保存(権限を600に) echo "my-secret-passphrase" > /root/.gpg-passphrase chmod 600 /root/.gpg-passphrase # バッチモードで復号 gpg --batch --passphrase-file /root/.gpg-passphrase \ --output output.tar.gz \ --decrypt backup.tar.gz.gpg echo "復号完了: $?"
600(所有者のみ読み取り可)にしてください。Linux ポート確認の全コマンドと同様に、セキュリティは権限管理が基本です。鍵のバックアップと復元
秘密鍵を紛失するとすべての暗号化データが読めなくなります。必ずバックアップを取ってください。# 秘密鍵のエクスポート(厳重に保管すること) gpg --armor --export-secret-keys tomohiro@example.com > secret-key-backup.asc # 信頼データベースのバックアップ gpg --export-ownertrust > ownertrust-backup.txt # 復元時 gpg --import secret-key-backup.asc gpg --import-ownertrust ownertrust-backup.txt
特定のファイル形式をまとめて暗号化する(find と組み合わせ)
# /var/backup/ 配下の全 .tar.gz をパスフレーズで暗号化 find /var/backup/ -name "*.tar.gz" -exec gpg -c {} \; # 暗号化後に元ファイルを削除する場合 find /var/backup/ -name "*.tar.gz" | while read f; do gpg -c "$f" && rm -f "$f" echo "暗号化完了: $f" done
RPM パッケージの GPG 署名を検証する
実はyum install や dnf install の裏側でも gpg が動いています。手動で確認する場合は以下です。# RPM パッケージの署名確認 rpm --checksig package.rpm # または rpm -K package.rpm package.rpm: digests signatures OK # インポート済みの GPG 鍵を確認 rpm -q gpg-pubkey gpg-pubkey-fd431d51-4ae0493b gpg-pubkey-2fa658e0-45700c69
トラブルシュート・エラー対処
「gpg: decryption failed: No secret key」が出る場合
このエラーは、ファイルを暗号化した公開鍵に対応する秘密鍵がない場合に発生します。# エラー例 gpg --decrypt encrypted_file.gpg gpg: encrypted with 1 passphrase gpg: decryption failed: No secret key # 確認: 自分の秘密鍵一覧 gpg --list-secret-keys # 確認: 暗号化に使われた鍵 ID を調べる gpg --list-packets encrypted_file.gpg | grep "keyid"
「gpg: keyserver receive failed」が出る場合
# キーサーバーへの接続失敗 gpg --recv-keys XXXXXXXXX gpg: keyserver receive failed: Network is unreachable # 代替キーサーバーを指定 gpg --keyserver hkps://keys.openpgp.org --recv-keys XXXXXXXXX # または直接インポート gpg --import key.asc
~/.gnupg/gpg.conf に keyserver-options http-proxy=http://proxy:port を追記する必要があります。ネットワーク設定の詳細は Linux DNS 設定の基本も参考にしてください。「gpg: WARNING: unsafe permissions on homedir」が出る場合
# 警告 gpg: WARNING: unsafe permissions on homedir '/home/tomohiro/.gnupg' # 修正: .gnupg ディレクトリの権限を修正 chmod 700 /home/tomohiro/.gnupg chmod 600 /home/tomohiro/.gnupg/* ls -la /home/tomohiro/.gnupg/ drwx------ 3 tomohiro tomohiro 4096 May 8 10:00 .
~/.gnupg ディレクトリは必ず 700、配下のファイルは 600 にしてください。これは gpg の必須要件です。パスフレーズを忘れた場合
残念ながら、秘密鍵のパスフレーズを忘れた場合は復元する方法がありません。鍵を新しく作り直し、そのパスフレーズを暗号化してパスワードマネージャーなどに保管してください。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| パスフレーズでファイルを暗号化 | gpg -c ファイル名 |
| ASCII 形式(.asc)で暗号化 | gpg -c --armor ファイル名 |
| 暗号化ファイルを復号 | gpg --output 出力先 --decrypt ファイル名.gpg |
| 鍵ペアを生成 | gpg --gen-key |
| 公開鍵をエクスポート | gpg --armor --export メールアドレス > key.asc |
| 公開鍵をインポート | gpg --import key.asc |
| 公開鍵で暗号化(受信者指定) | gpg -e -r メールアドレス ファイル名 |
| 鍵一覧を表示 | gpg --list-keys |
| 秘密鍵のバックアップ | gpg --armor --export-secret-keys メールアドレス > backup.asc |
| バッチモードで復号(スクリプト用) | gpg --batch --passphrase-file ファイル --decrypt 暗号ファイル |
セキュリティ設定を強化したい場合は、postfix mynetworks の書き方はこちらやPostfix TLS 設定の手順も合わせて確認してください。通信経路の暗号化と保存データの暗号化、両方を押さえておくことが現場のセキュリティ対策の基本です。
暗号化の知識、現場で使える形になっていますか?
gpg によるファイル暗号化はセキュリティ対策の一要素に過ぎません。SSHの鍵管理、ファイアウォール設定、ユーザー権限管理——これらを体系的に理解していないと、いざというときに手が止まります。
コマンドのコピペでその場をしのぐのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:sha256sumコマンドでファイルの整合性を確認する方法|md5sumとの使い分けやダウンロード検証も
- 前のページへ:printfコマンドでシェルスクリプトの出力を整形する方法|echoとの違いや書式指定・色付き出力も
- この記事の属するカテゴリ:Linuxtips・セキュリティへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます