Closed2
wsl2-ssh-agent の ssh.exe と PowerShell.exe をハードコード
wsl2-ssh-agent: WSL2からssh-agent.exeサービスへのブリッジ
mame/wsl2-ssh-agent: A bridge from WSL2 ssh client to Windows ssh-agent.exe service
で公開されているのですが、wsl.conf
で [interop] appendWindowsPath=false
を設定すると、Windows 側の PATH を通さないので、ssh.exe
と PowerShell.exe
を当然見つけてくれません。そのためだけに PATH
を通すのに抵抗があります。幸いソースコードも公開されているので、ssh.exe
と PowerShell.exe
をハードコードします。
環境は、Windows 11 Pro(22H2) で Ubuntu 22.04.2 LTS
で作業しています。build-essential
と git
を apt でインストールした状態だったと思います。
私の老化現象が激しいので、助長気味になっていると思います。
bash
で作業します。
mkdir ~/.local
mkdir ~/src && cd $_
curl -L -O https://go.dev/dl/go1.20.2.linux-amd64.tar.gz
tar -C ~/.local -xzvf go1.20.2.linux-amd64.tar.gz # ~/.local/go にインストール
export PATH=$PATH:~/.local/go/bin
go version
git clone https://github.com/mame/wsl2-ssh-agent.git
cd wsl2-ssh-agent
vi repeater.go # お好みのエディタで
go build
下記の diff
を参考に、PowerShell.exe
と ssh.exe
をフルパスで指定します。
diff --git a/repeater.go b/repeater.go
index e75a806..b920c79 100644
--- a/repeater.go
+++ b/repeater.go
@@ -32,7 +32,7 @@ func newRepeater(ctx context.Context) (*repeater, error) {
for i, limit := range waitTimes {
log.Printf("invoking [W] in PowerShell.exe%s", trial(i+1))
- cmd := exec.Command("PowerShell.exe", "-Command", "-")
+ cmd := exec.Command("/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe", "-Command", "-")
in, err := cmd.StdinPipe()
if err != nil {
continue
@@ -103,7 +103,7 @@ func getWinSshVersion() string {
log.Printf("check the version of ssh.exe%s", trial(i))
- cmd := exec.CommandContext(ctx, "ssh.exe", "-V")
+ cmd := exec.CommandContext(ctx, "/mnt/c/Windows/System32/OpenSSH/ssh.exe", "-V")
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
go build
すると、wsl2-ssh-agent
ができるので適当な場所にコピーします。あとは、使い方 の指示通りで動作すると思います。
後始末をします。~/src
と ~/go
をすべて削除するので 注意 してください。
cd ~/src/wsl2-ssh-agent
mv wsl2-ssh-agent ~/
cd ~/
rm -rf src
sudo rm -rf go
作成者さん、ソースコードの公開ありがとうございます。
消し忘れがあったので追記。
cd ~/
rm -rf .local/go
このスクラップは2023/03/28にクローズされました