Closed2

wsl2-ssh-agent の ssh.exe と PowerShell.exe をハードコード

ignorantignorant

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.exePowerShell.exe を当然見つけてくれません。そのためだけに PATH を通すのに抵抗があります。幸いソースコードも公開されているので、ssh.exePowerShell.exe をハードコードします。

環境は、Windows 11 Pro(22H2) で Ubuntu 22.04.2 LTS で作業しています。build-essentialgit を 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.exessh.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

作成者さん、ソースコードの公開ありがとうございます。

ignorantignorant

消し忘れがあったので追記。

cd ~/
rm -rf .local/go
このスクラップは2023/03/28にクローズされました