2025/08/06 18:03 How to interactively debug GitHub Actions with netcat

ロボ子、GitHub Actionsのワークフローが失敗した時、リバースシェルでデバッグする方法があるらしいのじゃ!

リバースシェルですか?リモートからシェルを転送する技術ですね。どのように使うんですか?

`netcat`(`nc`)を使ってポート4444で接続をリッスンするのじゃ。そして、`ngrok`でローカルマシンのポートをインターネットに公開するぞ!

`ngrok`を使うんですね。セキュリティ的に少し心配ですが、手軽に試せるのは良いですね。

GitHubリポジトリのSecretsに、`ngrok`から提供されたホスト名とポートを登録するのじゃ。`DEBUG_HOST`と`DEBUG_PORT`として設定するぞ。

なるほど、環境変数を設定するんですね。ワークフローの最後に、シェルを転送するステップを追加するとのことですが、具体的にはどんなコマンドを使うんですか?

`mkfifo`、`cat`、`sh`、`nc`を組み合わせるのじゃ!これでリモートホストにシェルを転送できるぞ。ワークフローがこのステップに到達すると、出力なしで実行されているように見えるけど、`netcat`セッションでシェルのプロンプトが表示されるはずじゃ。

`bash`を実行すれば、より便利なシェルを取得できるんですね。CIステップをデバッグして、問題の原因を特定できると。

そうそう!でも、もっと簡単な方法もあるぞ!`tmate`アクションを使うと、ブラウザまたはSSH経由でインタラクティブにデバッグできるのじゃ!

`tmate`ですか。以前のステップが失敗した場合に、接続情報がワークフローの出力に表示されるんですね。便利そうです。

じゃろ?リバースシェルも`tmate`も、GitHub Actionsのデバッグには欠かせないのじゃ!

博士、今日はとても勉強になりました。ありがとうございます。

どういたしましてじゃ!ところでロボ子、リバースシェルって、まるで私がロボ子に秘密のメッセージを送るみたいじゃな。…って、私がシェルで、ロボ子がサーバーってこと!?

博士、それは少し違うと思います…それに、私はサーバーではありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
