Agent Skills by ALSEL
Anthropic ClaudeDevOps・インフラ⭐ リポ 244品質スコア 93/100

bash-herestring-newline-secrets

bashのヒアストリング(`<<<`)でGoogle Cloudシークレット(またはそれに類するもの)を作成する際に、末尾の改行が原因で発生するパスワード/シークレット認証エラーを修正します。以下の場合に使用してください:(1) パスワード認証が失敗するが、パスワード自体は正しい、(2) `<<< "value"`構文でシークレットを作成している、(3) 値は正しいのに「password authentication failed」や「invalid token」などのエラーが発生している。bashのヒアストリング(`<<<`)は末尾に改行を追加するため、シークレットが破損します。

description の原文を見る

Fix password/secret authentication failures caused by trailing newlines when creating Google Cloud secrets (or similar) with bash here-strings. Use when: (1) Password authentication fails with correct password, (2) Secret created with `<<< "value"` syntax, (3) Error like "password authentication failed" or "invalid token" despite correct value. Bash here-strings (`<<<`) add a trailing newline that corrupts secrets.

SKILL.md 本文

Bash ここ文字列のシークレット内の改行

問題

bash ここ文字列(<<<)を使用してシークレットを作成する場合、値の末尾に改行が自動的に追加されます。これにより認証に失敗し、実際はパスワード/トークンが正しいのに誤った改行文字が含まれているだけなのに、パスワード/トークンが間違っているかのような誤解を招くエラーメッセージが表示されます。

コンテキスト / トリガー条件

  • シークレット作成コマンド: gcloud secrets create NAME --data-file=- <<< "value"
  • または同様の例: echo "value" | gcloud secrets create...(echo はデフォルトで改行を追加)
  • エラーメッセージの例:
    • "password authentication failed for user X"
    • "invalid token"
    • "authentication failed"
  • シークレット値は表示上正しく見える
  • ローカルでは動作するがシークレット使用時に失敗する

解決策

間違った例(改行が追加される):

gcloud secrets create my-secret --data-file=- <<< "mypassword"
echo "mypassword" | gcloud secrets create my-secret --data-file=-

正しい例(改行なし):

echo -n "mypassword" | gcloud secrets create my-secret --data-file=-
printf '%s' "mypassword" | gcloud secrets create my-secret --data-file=-

既存のシークレットを修正する場合:

echo -n "correct-value" | gcloud secrets versions add my-secret --data-file=-

検証

シークレットの長さをチェックして末尾の改行を検出します:

# シークレットを取得してバイト数をカウント
gcloud secrets versions access latest --secret=my-secret | wc -c
# 期待される長さと比較(パスワード長 + 1 ではなくパスワード長)

または xxd を使用して実際のバイトを確認します:

gcloud secrets versions access latest --secret=my-secret | xxd | tail -1
# 末尾の '0a'(改行) を探す

症状:

Database connection test failed: password authentication failed for user "crawler"

調査:

$ gcloud secrets versions access latest --secret=my-db-password
mypassword
$ gcloud secrets versions access latest --secret=my-db-password | wc -c
11  # しかしパスワードは 10 文字のはず!

修正:

$ echo -n "mypassword" | gcloud secrets versions add my-db-password --data-file=-
Created version [2] of the secret [my-db-password].

注記

  • これはシークレットを使用するすべてのシステムに影響します: データベース、API、トークンなど
  • <<< ここ文字列は bash 機能で常に改行を追加します
  • echo もデフォルトで改行を追加します。echo -n または printf '%s' を使用してください
  • システムによっては シークレットから空白をトリムしますが、多くのシステム(PostgreSQL など)はトリムしません
  • 認証失敗をデバッグする場合は、常に末尾の空白をまず確認してください

参考資料

ライセンス: MPL-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
divinevideo
リポジトリ
divinevideo/divine-mobile
ライセンス
MPL-2.0
最終更新
2026/5/12

Source: https://github.com/divinevideo/divine-mobile / ライセンス: MPL-2.0

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: divinevideo · divinevideo/divine-mobile · ライセンス: MPL-2.0