connect ENOENT \\\\.\\pipe\\openssh-ssh-agent
from 日刊記録sheet 2023-10-15
Windows側にinstallしたVisual Studio Codeから、Remote Containers経由でWSL上にcontainerを展開したときに発生したエラー
こういう状況らしい
Docker containerの生成自体は成功している
SSH鍵の設定がうまくいっておらず、git push/git fetchなどができない状態になっている
エラー内容
code:error
2176139 ms Container server: Remote to local stream terminated with error: {
message: 'connect ENOENT \\\\.\\pipe\\openssh-ssh-agent',
name: 'Error',
stack: 'Error: connect ENOENT \\\\.\\pipe\\openssh-ssh-agent\n' +
'\tat PipeConnectWrap.afterConnect as oncomplete (node:net:1494:16)'
}
通知欄にはlocal ホスト (\\.\pipe\openssh-ssh-agent) の ssh-agent に接続できませんでした。サービスが実行されていることを確認します。という日本語エラーが出てきた
原因
コンテナ内にSSH鍵がないから
当然っちゃ当然の現象である
対処方法
ssh-agent をバックグラウンドで動かして鍵を追加しておくとRemote Containers拡張機能がうまいことやってくれるよTL;DR | Visual Studio CodeのRemote ContainersからもGitを使う方法 - おかしんワークス
(WSL) openssh-clientとsocatを入れる
$ sudo apt install openssh-client socat
https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials#_using-ssh-keys
backgroundでssh-agentを起動して鍵を登録する
$ eval "$(ssh-agent -s)"
fishの場合は↓を使う
$ eval (ssh-agent -c)
fishシェルでeval "$(ssh-agent -s)"する #fish - Qiita
Evaluate_ssh-agent | fish - ArchWiki
$ ssh-add ~/.ssh/id_ed25519
パスは各自が使っている秘密鍵ファイルへのパスに書き換える
.bash_profileに↓を追加する
ps -axで起動中のリストを表示し、その中からssh-agent -sが含まれている行数を数える
takker.iconの環境では3個動いていた。なんで?
if -zは対象の文字列が空のときにtrueになる
.ssh/ssh-agentに$SSH_AUTH_SOCKの設定やssh-agentの起動コマンドを書き込んでおく
code:.bash_profile(sh)
if -z "$SSH_AUTH_SOCK" ; then
# Check for a currently running instance of the agent
RUNNING_AGENT="ps -ax | grep 'ssh-agent -s' | grep -v grep | wc -l | tr -d '[:space:]'"
if "$RUNNING_AGENT" = "0" ; then
# Launch a new instance of the agent
ssh-agent -s &> $HOME/.ssh/ssh-agent
fi
eval cat $HOME/.ssh/ssh-agent
fi
ssh-add ~/.ssh/id_ed25519
# すでに記述されているなら不要
if -f ~/.bashrc ; then
. ~/.bashrc
fi
コードの詳細はここが詳しい
08:14:31 直らない!!
依然local ホスト (\\.\pipe\openssh-ssh-agent) の ssh-agent に接続できませんでした。サービスが実行されていることを確認します。が出てきてしまった
どうなってんだ
container側にssh-addは入っている
ssh-add -lするとerror fetching identities: communication with agent failedが発生する
.gitconfigは読まれてる
git config -lで確認した
SSH_AUTH_SOCKにはパスが入っている
ssh-agent: SSH_AUTH_SOCK in container (略)で生成されたもの
怪しいログ
code:log
6552 ms Start: Run in Host: docker exec -i -u root ecb2d89ef24eec38cd420dae78b1991acc4bd3cd81c102d94f97d1e50bf42d40 /bin/sh
6553 ms Start: Launching Dev Containers helper.
6553 ms ssh-agent: SSH_AUTH_SOCK not set on wsl host.
6553 ms ssh-agent: SSH_AUTH_SOCK not set on local host.
6554 ms ssh-agent: SSH_AUTH_SOCK in container (/tmp/vscode-ssh-auth-11c775a4-f745-45a9-bc37-3a96f9d824a5.sock) forwarded to local host (\\.\pipe\openssh-ssh-agent).
08:46:55 コンテナのログを読んでいる
ssh-agent: SSH_AUTH_SOCK not set on wsl host.が怪しい
09:10:23 解決できない……
SSH_AUTH_SOCK not set on wsl hostで完全一致検索して出てくるのが以下の2ページのみ
一番似ているのはhttps://github.com/microsoft/vscode-remote-release/issues/8745 だが、何もコメントなしにcloseされてしまっている
https://github.com/microsoft/vscode-remote-release/issues/8666 にsshのversionのことが書かれているが、windowsがhostの場合のみの話のようだ
09:29:31 行けそうなのがみつかった
https://github.com/microsoft/vscode-remote-release/issues/6312
"SSH_AUTH_SOCK not set on" - Google 検索
だめだ。ssh周りでより詳細なログは出てこなかった
09:50:58 resolveShellEnv(): skipped (--force-disable-user-env)がlogに出てきたので、これで検索してみたが何も分からなかった
09:58:15 あとこれに関係があるのかわかないけど、一定時間経過するとDocker Desktop for Windowsがwaiting for docker daemon: context deadline exceededを吐いて強制終了する
WSL2 から起動した VSCode DevContainer に SSH agent で Git の鍵を渡す #VSCode - Qiita
WSL2 + VSCode + DevcontainerでGitHubにSSHでpushする際にちょっとハマった
WSL2のUbuntuでkeychain経由でssh-agentを使う
/programming-notes/ssh-agentにはkeychainだとwindows起動後に毎回pass phraseを聞かれるようになると書かれている
docker - VS Code: Remote Container: Using SSH - Stack Overflow
ログに表示されたエラー内容で調べて出てきた記事
参考にならなかった
#2023-10-29 06:59:09
#2023-10-15 13:55:54