👷♂️
Azure DevOpsのSSH接続で“shell request failed”が出る理由とその対処法
Azure DevOpsのSSH接続とGit操作の違いをわかりやすく解説
はじめに
こんにちは!株式会社ヘッドウォータースの新卒2年目の矢野と申します。
最近、Azure DevOpsのリポジトリにSSH接続しようとした際、shell request failed on channel 0
という謎のエラーメッセージに遭遇しました。最初は「え、失敗してるの!?」と焦ったのですが、調べてみると実はこれ、問題ではなく、むしろ正常な動作だったんです。
この記事では、Azure DevOpsのSSH接続がどのように機能しているのか、なぜ git pull
はできるのに ssh
コマンドではログインできないのかを、初心者の方にもわかりやすく解説していきます。
Azure DevOpsのSSH接続とは
Azure DevOpsでは、Git操作(clone
、pull
、push
など)を安全に行うために、SSH鍵を使った認証をサポートしています。GitHubやGitLabと同様に、SSH接続を使うことで毎回ユーザー名とパスワードを入力せずに済みます。
ただし、ここで1つ注意点があります。
ssh -T git@ssh.dev.azure.com
このように直接SSH接続しようとすると、以下のようなエラーが出ます:
remote: Shell access is not supported.
shell request failed on channel 0
これ、実は正常な動作なんです。
Git操作とシェル操作の違い
Git操作(Git over SSH)
-
git pull
、git push
、git clone
などのGitコマンドは、裏側でSSHを使ってAzure DevOpsと通信します。 - これはあくまでGit専用のプロトコルであり、シェルにログインしてコマンドを実行するためのものではありません。
シェル操作(通常のSSH)
-
ssh ユーザー@ホスト
のように、リモートサーバーにログインしてbashなどのシェルを使うこと - Azure DevOpsではこのような操作は許可されていません
実際の挙動を確認してみる
SSH鍵の準備ができている状態で、以下のコマンドを実行してみます:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_azure
ssh -T git@ssh.dev.azure.com
その結果:
remote: Shell access is not supported.
shell request failed on channel 0
これが出れば、認証には成功しているということです!
たとえ話:Azure DevOpsはオフィスビル
Azure DevOpsは、Gitの操作は受け付けるけれど、サーバー内部に入って自由に操作することはできない、いわばセキュリティの厳しいオフィスビルのような存在です。
- ✅ 荷物(コード)を出し入れできる(Git操作)
- ❌ 中に入って作業(シェル操作)はできない(門前で拒否される)
Gitでできることは、あくまで「玄関でのやり取り」に限定されているイメージです。
まとめ
- Azure DevOpsでは、Git操作はSSHを使って安全に行える
- ただし、
ssh
コマンドでのログイン(シェル操作)はサポートされていない -
shell request failed
はエラーではなく、正常な反応 - Git over SSH と通常のSSHアクセスの違いを理解することが大事
少しでも「なんだこれ!?」を減らせる記事になっていれば嬉しいです。
ご覧いただきありがとうございました!
Discussion