SSH Configの書き方

基本のフォーマット

複数のホストを記述でき ssh <Host> で接続できる

Host hoge
   User foo
   Hostname git1.example.com
   IdentityFile ~/.ssh/id_ed25519_foo
   Port 22222
Host piyo
   User bar
   Hostname git2.example.com
   IdentityFile ~/.ssh/id_ed25519_bar
   Port 20202

設定項目

項目 意味合い
Host sshコマンドで指定する接続先名。Gitで利用する場合はHostnameと合わせる必要がある
User ログインするユーザー名
Hostname 接続先のホスト名
IdentityFile 秘密鍵のパス
Port 接続先のポート
ForwardAgent プロキシサーバー側の設定。クライアントからの接続を中継するかどうか
ProxyCommand 踏み台サーバーへの接続コマンド

トラブルシューティング

GitHubにSSHで繋ぎに行ったときにError: Permission denied (publickey)と出る

GitHubへのSSH接続はUserがgitでなければならない

そういえばgitコマンドはユーザー名を直に指定しているのかSSH Configでgit以外を指定していても通った気がする

GitHubにSSH接続しているときにgit cloneやgit pushがフリーズする

Hostの値がHostnameと異なるとフリーズすることがある

関連記事

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実機で確認したので、その結果を記事に反映し、記事を読みやすく改良