受付9:00~18:00 ※土日祝除く
2025.07.022025.07.01
Web制作 システム
Githubは開発者にとってなくてはならないサービスですが、初期設定で躓いて時間を浪費してしまうことも少なくありません。ハマってしまって本来の作業が捗らないとなれば本末転倒です。
サーバーからGitHub、ローカルのPCからGithubにSSH接続するための初期設定は、基本的にコマンドラインから行う必要があります。とりわけサーバーからのGitHubへの設定は、サーバーによって使えないコマンドがあるなどして時間がかかることあります。SSHの公開鍵、秘密鍵を作ってGithubに登録したはずなのに下記の無情なエラーメッセージを見たときの対処方法をご紹介します。
git@github.com: Permission denied (publickey).
鍵の設定から説明しますので、結論だけ読みたい場合は SSH鍵の設定を行ったのに接続できない から読んでみてください。

こんな方に役立ちます
●共有レンタルサーバーを使用している
●コマンドラインに苦手意識あり
●いつも調べながらコマンドを入力しているけどあまり意味はわかっていない
前提
下記のような環境を想定しています。適宜、読み替えてください。
レンタルサーバーからGitHubのレポジトリにSSHで通信するための初期設定です。
サーバー種類: さくらのレンタルサーバー
サーバー名: test.sakura.ne.jp
アカウント: test
パスワード: *************
サーバー側での作業
サーバーにログインしてSSHの鍵を作成します。BashなりPowershellなりのシェルからサーバーにSSH接続します。
ssh test@test.sakura.ne.jp
SSH鍵は.sshという隠しフォルダに格納するルールですので移動します。
cd /home/test/.ssh
自分がいまどのフォルダにいるか知りたい場合はpwdコマンドを使いましょう。パスワードみたいな名前ですが”present working directory”の略です。
pwd
ここまで順調であれば /home/test/.ssh にいるはずです。すでに鍵があるかどうかリストコマンドで確認してみます。windowsでいうところのdirです。
ls -la
# オプションの-laは -a(隠しファイルも表示)と-l(詳細表示)の意味です
すでに作った鍵があれば「鍵名」「鍵名.pub」の2ファイルがセットで表示されるはずです。現状は空でも問題ありません。
鍵を作成します。ssh-keygenコマンドを使います。
ssh-keygen -t rsa -f github-repo
# -tは暗号アルゴリズムの指定(ここではrsaを指定)
# -fはファイル名の指定
-tはなくても構いません、デフォルトがrsaです。-fを省略すると id_rsa というデフォルト名になります。鍵ができているか確認します。
ls -la
github-repo github-repo.pub ができているかと思います。前者が秘密鍵、後者が公開鍵です。公開鍵のテキストをコピーしてGitHub側に貼り付ければ設定は完了となります。
catコマンドで中身を表示します。catはファイルを連結させるコマンドですが、中身を表示するのに便利です。vi(エディタ)で開いても構いませんが中身を改変しないように気を付けてください。コピーするのは公開鍵の方ですので.pubを忘れないようにしましょう。
cat github-repo.pub
ssh-rsaから始まる文字列がずらずらと表示されたらOKです。最後のユーザー名まで含めてすべてコピーしておいてください。
なぜ鍵を作る必要があるのか?
サーバーとGitHubの間で通信をするために、通常であればパスワードを使用します。ssh サーバー名でログインするアレです。そうなるとGitHubからプッシュするときも、サーバーからプルするときも毎回パスワードを入力することになります。実際に2020年頃まではHTTPSとパスワード認証も可能でした。
しかし2021年にこの方法は廃止されました。平文入力であることや、パスワードを使いまわされるリスクがあるため、セキュリティ強化の観点からなくなったのです。SSH鍵は高いセキュリティを担保しつつ高速で、一度設定してしまえば意識する必要すらないためよく使われています。
GitHub側での作業
サーバー側で作成した公開鍵をGitHubに設定します。通行手形をGitHubに渡すようなイメージです。ここで注意すべきことは、今回はデプロイ用の鍵の設定だという点です。それぞれ設定する場所が異なってきますので注意してください。
リポジトリを作成する
リポジトリを作成します。すでにある場合は読み飛ばしてください。

リポジトリ名はTestSakuraとします。プライベートにしています。

SSH公開鍵を設定する
下記のような画面に切り替わります。Settingsをクリックします。

Deploy keysを選択します。

Add deploy keyをクリックします。

Keyのテキストエリアにさきほどコピーした公開鍵のテキストを貼り付けます。Titleにはgithub-repoなどわかりやすい名前を、Allow write accessにチェックを入れてAdd keyをクリックしてください。

以上でSSH鍵の設定は完了です。接続テストを行います。
ssh -T git@github.com
# -Tはシェルを使わないという意味です。Githubはシェルを提供していないため-Tを入れています。
「Hi ユーザー名」と表示されたら完了です。、、、と通常は終了するところですが、今回の本題はここからです。下記エラーメッセージが出てきてしまった場合の対処方法です。
git@github.com: Permission denied (publickey).
SSH鍵の設定を行ったのに接続できない
ここまで手順どおりに進めていれば鍵の設定は問題ないはずです。コピペを失敗している可能性もなくはないため下記のコマンドを実行してください。
ssh -i /home/test/.ssh/github-repo git@github.com
# -iは鍵を指定するオプションです
手動で鍵を指定して再度接続を試しています。鍵のパスは環境によりますので正しいものに読み替えてください。下記のように移動してから実行しても構いません。しつこく書いている理由はここで鍵設定自体を失敗している可能性を潰しておくためです。
cd /home/test/.ssh
ssh -i github-repo git@github.com
鍵を指定すれば下記のようにメッセージが表示されたでしょうか。それでしたら鍵の設定は問題ありません。SSHの鍵認証は成功しているが接続ができない場合 に進んでください。
PTY allocation request failed on channel 0
Hi GitHubのユーザー名/レポジトリ! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
鍵の設定に失敗している場合
鍵を指定しても同じエラーが出る場合は、そもそも鍵の設定に失敗している可能性が高いです。再度、鍵の存在を確認しましょう。
cd /home/test/.ssh
# 鍵のあるはずのフォルダに移動
ls -a
# フォルダ内のすべてのファイルを表示
拡張子.pubのありなし2ファイル1セットのファイルがあればそれが鍵です。今回の例で言えばgithub-repoとgithub-repo.pubのファイルがあるはずです。ない場合は作りましょう。
GitHub側の鍵の設定に失敗している場合
鍵は確かに存在するが、存在するはずの鍵を指定してもエラーが出る場合はGitHub側の設定を疑います。
コピペをやり直してみる
コピーすべきテキストは.pubファイル(公開鍵)の中身です。間違えて拡張子なしの方(秘密鍵)をコピーしないようにしましょう。
cat /home/test/.ssh/github-repo.pub
テキストのコピーはssh-rsaから最後のユーザー名まですべてに対して行います。前後に余計なスペースなど入れていないか、テキストファイルに貼り付けるなどして再確認してみてください。
GitHubの全体設定の方に設定していないか確認する
GitHubのSSH鍵は全体用とデプロイ用の2種類の設定があります。もし下記の画面で設定している場合は全体用に設定してしまっていますので、デプロイ用の設定に修正しましょう。
全体設定の方が共有範囲が広いため、これが原因で接続できない可能性は低いですが、セキュリティリスクがありますので注意してください。

SSHの鍵認証は成功しているが接続ができない場合
鍵の認証はきちんとできているにも関わらず、接続テストが失敗している原因についてです。下記の2点が考えられます。
SSHが別の鍵を読みに行っている
鍵を指定すれば通るのに、指定しないと接続拒否されるということはSSHが別の鍵を読みに行っていることが考えられます。鍵の作成時にも触れましたが、鍵に名前を付けなかった場合はデフォルトで「id_rsa」という鍵が生成されます。この鍵は存在しないのでエラーになっているということです。
configファイルに追記する(新規作成する)
デフォルトの鍵を読みにいかないよう、configファイルに鍵の設定を追記します。今回の例であるさくらのレンタルサーバーにはnanoエディタが入っていない(入れることもできない)ためviを使います。
vi ~/.ssh/config
# ~/はホームディレクトリを指すパス指定です。~/の記述で/home/test/と同じ意味となります。
configファイルがある場合は開き、ない場合は新規作成して開いてくれます。viはnanoと比べて操作が難しいので順を追って作業しましょう。
viが起動して、シェルにはconfigの内容が表示されているはずです。新規作成の場合は空です。この時点ではviはコマンドモードになっていますので、編集はまだできません。i を入力してエンターを押します。これで編集モードに入れます。
作業としては下記をコピペするだけです。IdentityFileのパスは読み替えてください。ここで鍵の位置を定義しています。configファイルにすでに記述がある場合はその下に追記します。
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github-repo
IdentitiesOnly yes
終了するときはまず編集モードから抜けるためにescキーを押します。見た目ではわかりづらいですが、コマンドモードになっています。この状態で :wq と入力してエンターを押すと上書き保存され、viエディタが終了します。まとめると下記のようになります。
vi ~/.ssh/config
# configファイルをviエディタで開いた(もしくは新規作成)
i
# コマンドモードでiを入力したので、編集モードに切り替え。エンターを忘れずに。
コピペする。いまどきのシェルなら普通にショートカットでコピペできます。
ESCキーで編集モードから出てコマンドモードへ。
:wq
# 上書き保存。エンターを忘れずに。viが終了するはずです。
configファイルの内容を確認します。
cat ~/.ssh/config
入力した内容が表示されれば完了です。
Viエディタ必勝法
viエディタは慣れていないと戸惑います。わけがわからなくなったら escキーでコマンドモードに抜けて :q! でエンターしましょう。保存せずに終了できるので何度でも最初からやり直せます。
パーミッションの設定に問題がある
SSHはパーミッションが厳しいため、再確認しておきましょう。秘密鍵のパーミッションは緩すぎると拒否されることがあります。
chmod 600 ~/.ssh/github-repo
configファイルのパーミッションも念のため設定します。
chmod 600 ~/.ssh.config
最終確認
対応が終了したら最終確認を行います。
ssh -T git@github.com
下記メッセージが表示されればOKです。
Hi GitHubのユーザー名/レポジトリ! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
お問い合わせCONTACT
株式会社エー・エム・ティーは
印刷物からホームページ制作・更新運用管理までトータルサポート。
企業様の課題解決や企業価値向上のお手伝いをいたします。