You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从CMD调用WSL命令时如何使用已运行的SSH代理

从CMD调用WSL命令时如何使用已运行的SSH代理

我之前也碰到过这个问题,每次在CMD里敲wsl rsync都要输SSH密钥密码,烦得不行!后来折腾出几个靠谱的方法,能让你直接复用WSL里已经跑起来的SSH代理,不用反复输密码。

  • 第一步:先确保WSL里的SSH代理正常运行并加载了密钥
    打开你的WSL终端,先检查ssh-agent是否在后台运行:

    ps aux | grep ssh-agent | grep -v grep
    

    如果有输出,说明代理已经在跑;要是没输出,就手动启动它:

    eval $(ssh-agent -s)
    

    接下来把你的SSH密钥添加到代理里(只需要输一次密码,之后代理会记住):

    ssh-add ~/.ssh/id_rsa
    

    可以用ssh-add -l命令确认密钥已经成功添加。

  • 方法一:临时在CMD里传递代理路径
    先在WSL终端里执行echo $SSH_AUTH_SOCK,会得到类似/run/user/1000/keyring/ssh这样的路径。
    回到CMD窗口,调用rsync的时候把这个路径传进去就行:

    wsl -e bash -c "SSH_AUTH_SOCK=/run/user/1000/keyring/ssh rsync [你的rsync命令参数]"
    

    这样rsync就能直接用上已有的代理,不用再输密码了。

  • 方法二:自动获取代理路径,更省心
    要是不想每次都手动复制路径,可以在CMD里先执行这条命令,自动抓取WSL里的代理路径:

    for /f %i in ('wsl echo $SSH_AUTH_SOCK') do set WSL_SSH_AUTH_SOCK=%i
    

    之后每次调用rsync的时候,直接用这个变量就行:

    wsl -e bash -c "SSH_AUTH_SOCK=%WSL_SSH_AUTH_SOCK% rsync [你的rsync命令参数]"
    
  • 方法三:让WSL自动启动代理,一劳永逸
    为了不用每次手动启动代理,可以在WSL的shell配置文件里加一段自动脚本。比如用bash的话,编辑~/.bashrc文件:

    # 自动启动并复用SSH代理
    if [ -z "$SSH_AUTH_SOCK" ]; then
        # 查找已运行的ssh-agent进程
        AGENT_PID=$(ps aux | grep ssh-agent | grep -v grep | awk '{print $2}')
        if [ -n "$AGENT_PID" ]; then
            # 找到对应的socket文件
            SSH_AUTH_SOCK=$(find /run/user/$(id -u) -name 'ssh-agent.*' 2>/dev/null | head -n1)
        else
            # 启动新的ssh-agent
            eval $(ssh-agent -s)
        fi
        # 如果密钥还没添加,自动加载
        ssh-add -l > /dev/null || ssh-add ~/.ssh/id_rsa
    fi
    

    保存文件后,下次启动WSL终端时,代理会自动启动并加载密钥。之后用方法二的方式在CMD里调用rsync就可以顺畅使用了。

备注:内容来源于stack exchange,提问作者craftycamper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:38:00