gpgコマンドでファイルを暗号化・復号する方法|鍵管理から実務活用まで

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, セキュリティ > gpgコマンドでファイルを暗号化・復号する方法|鍵管理から実務活用まで
「大切なファイルをサーバー間で転送したいけど、平文で置いておくのは怖い」
「バックアップを外部ストレージに保存するとき、暗号化しておきたい」

このような場面で頼りになるのが gpg コマンドです。GPG(GNU Privacy Guard)は OpenPGP 規格を実装した暗号化ツールで、RHEL・Ubuntu・CentOS など主要ディストリビューションに標準搭載されています。

この記事では、gpg コマンドを使ったファイルの暗号化・復号の手順を解説します。公開鍵暗号方式と共通鍵(パスフレーズ)暗号方式の両方をカバーし、鍵の生成・エクスポート・インポート、そしてバックアップ運用での実践例まで紹介します。

この記事のポイント

・gpg -c でパスフレーズによる簡易暗号化ができる
・gpg --gen-key で公開鍵ペアを生成し相手と安全に通信できる
・--armor オプションで ASCII 形式の可搬性のある暗号文を出力できる
・鍵のエクスポート・インポートで複数サーバー間の運用に対応できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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...

このファイルを相手に渡します(メール添付・SCP 転送・鍵サーバー登録など)。

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 installdnf 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

rpm コマンドの使い方では RPM の基本操作を詳しく解説しています。パッケージ管理とセキュリティは切り離せない関係です。

トラブルシュート・エラー対処

「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.confkeyserver-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 暗号ファイル
gpg はシンプルなコマンドながら、パスフレーズ方式・公開鍵方式・署名検証と用途が広いツールです。特にバックアップファイルの暗号化や、RPM パッケージの署名確認は現場でよく使う場面です。tar コマンドの実用例と組み合わせて、暗号化バックアップのパイプラインを組むと実務で特に役立ちます。

セキュリティ設定を強化したい場合は、postfix mynetworks の書き方はこちらPostfix TLS 設定の手順も合わせて確認してください。通信経路の暗号化と保存データの暗号化、両方を押さえておくことが現場のセキュリティ対策の基本です。

暗号化の知識、現場で使える形になっていますか?

gpg によるファイル暗号化はセキュリティ対策の一要素に過ぎません。SSHの鍵管理、ファイアウォール設定、ユーザー権限管理——これらを体系的に理解していないと、いざというときに手が止まります。
コマンドのコピペでその場をしのぐのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。