<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Windows on 猫猫鱼的小窝</title>
    <link>https://csdn.fjh1997.top/tags/windows/</link>
    <description>Recent content from 猫猫鱼的小窝</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    <managingEditor>xxx@example.com (catcatyu)</managingEditor>
    <webMaster>xxx@example.com (catcatyu)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Tue, 28 Apr 2026 23:55:00 +0800</lastBuildDate>
    
    
    <atom:link href="https://csdn.fjh1997.top/tags/windows/atom.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>windows下安装openssh server卡顿的时候使用代理安装的方法</title>
      <link>https://csdn.fjh1997.top/posts/2026042801.html</link>
      <pubDate>Tue, 28 Apr 2026 23:55:00 &#43;0800</pubDate>
      <author>xxx@example.com (catcatyu)</author>
      <guid>https://csdn.fjh1997.top/posts/2026042801.html</guid>
      <description>
        <![CDATA[<h1>windows下安装openssh server卡顿的时候使用代理安装的方法</h1><p>作者：catcatyu（xxx@example.com）</p>
        
          <h2 id="问题现象">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e7%8e%b0%e8%b1%a1"></a>
问题现象
</h2><p>一开始我是从 Windows 的“设置 -&gt; 系统 -&gt; 可选功能 -&gt; 查看功能”里添加 <code>OpenSSH 服务器</code>，界面一直停在“正在添加”，进度很慢：</p>
<p><img src="/images/windows-openssh-server-optional-feature-stuck.png" alt="可选功能里安装 OpenSSH 服务器卡住"></p>
<p>后面不再等可选功能页面，改成用命令行安装和排查 OpenSSH Server：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Add-WindowsCapability</span> <span class="n">-Online</span> <span class="n">-Name</span> <span class="n">OpenSSH</span><span class="p">.</span><span class="n">Server</span><span class="p">~~~~</span><span class="mf">0.0</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">0</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>命令执行很慢，长时间没有进度。即使给当前 PowerShell 加了代理，例如：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nv">$env:http_proxy</span><span class="p">=</span><span class="s2">&#34;http://127.0.0.1:10809&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">$env:https_proxy</span><span class="p">=</span><span class="s2">&#34;http://127.0.0.1:10809&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>也不一定有用。</p>
<p>原因是 <code>Add-WindowsCapability</code> 背后不是简单的 PowerShell 下载，而是通过 Windows Update、BITS、CBS/TrustedInstaller 这些系统组件去获取 FoD（Features on Demand）内容。当前用户的环境变量代理不等于系统服务账户代理。</p>
<h2 id="排查过程">
<a class="header-anchor" href="#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b"></a>
排查过程
</h2><p>先看 WinHTTP 代理：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">netsh</span> <span class="n">winhttp</span> <span class="n">show</span> <span class="n">proxy</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>再看代理端口是否真的在监听：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Get-NetTCPConnection</span> <span class="n">-LocalAddress</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="py">1</span> <span class="n">-LocalPort</span> <span class="mf">10809</span> <span class="n">-State</span> <span class="n">Listen</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果使用 v2rayN/xray，通常 HTTP 代理端口是 <code>127.0.0.1:10809</code>；如果使用 Clash，常见端口是 <code>127.0.0.1:7890</code>。</p>
<p>然后看 CBS/DISM 日志：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Select-String</span> <span class="n">-Path</span> <span class="n">C:</span><span class="p">\</span><span class="n">Windows</span><span class="p">\</span><span class="n">Logs</span><span class="p">\</span><span class="n">CBS</span><span class="p">\</span><span class="n">CBS</span><span class="p">.</span><span class="py">log</span> <span class="n">-Pattern</span> <span class="s2">&#34;FCAcquirerWUClient|DownloadProgress|0x&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">Select-String</span> <span class="n">-Path</span> <span class="n">C:</span><span class="p">\</span><span class="n">Windows</span><span class="p">\</span><span class="n">Logs</span><span class="p">\</span><span class="n">DISM</span><span class="p">\</span><span class="n">dism</span><span class="p">.</span><span class="py">log</span> <span class="n">-Pattern</span> <span class="s2">&#34;OpenSSH|Add-Capability|0x&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>我这里看到的关键日志是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">FCAcquirerWUClient: WULib DownloadProgress: [0 / 100]
</span></span></code></pre></td></tr></table>
</div>
</div><p>也就是卡在 Windows Update 下载阶段，并不是 OpenSSH 本身安装慢。</p>
<p>还要检查 CBS 是否有待重启事务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Test-Path</span> <span class="s2">&#34;HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">Test-Path</span> <span class="s2">&#34;HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果返回 <code>True</code>，建议先重启。CBS 有 pending reboot 时，<code>Add-WindowsCapability</code> 很容易卡住、失败或重复下载。</p>
<h2 id="正确的代理配置">
<a class="header-anchor" href="#%e6%ad%a3%e7%a1%ae%e7%9a%84%e4%bb%a3%e7%90%86%e9%85%8d%e7%bd%ae"></a>
正确的代理配置
</h2><p>以 <code>127.0.0.1:10809</code> 为例，管理员 PowerShell 执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">netsh</span> <span class="n">winhttp</span> <span class="nb">set </span><span class="n">proxy</span> <span class="nb">proxy-server</span><span class="p">=</span><span class="s2">&#34;http=127.0.0.1:10809;https=127.0.0.1:10809&#34;</span> <span class="nb">bypass-list</span><span class="p">=</span><span class="s2">&#34;localhost;127.0.0.1;&lt;local&gt;&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>再给 BITS 的三个服务账户设置代理：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">bitsadmin</span> <span class="p">/</span><span class="n">util</span> <span class="p">/</span><span class="n">setieproxy</span> <span class="n">localsystem</span> <span class="n">MANUAL_PROXY</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="mf">1</span><span class="err">:</span><span class="mf">10809</span> <span class="n">NULL</span>
</span></span><span class="line"><span class="cl"><span class="n">bitsadmin</span> <span class="p">/</span><span class="n">util</span> <span class="p">/</span><span class="n">setieproxy</span> <span class="n">networkservice</span> <span class="n">MANUAL_PROXY</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="mf">1</span><span class="err">:</span><span class="mf">10809</span> <span class="n">NULL</span>
</span></span><span class="line"><span class="cl"><span class="n">bitsadmin</span> <span class="p">/</span><span class="n">util</span> <span class="p">/</span><span class="n">setieproxy</span> <span class="n">localservice</span> <span class="n">MANUAL_PROXY</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="mf">1</span><span class="err">:</span><span class="mf">10809</span> <span class="n">NULL</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>重启相关服务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Restart-Service</span> <span class="n">wuauserv</span><span class="p">,</span><span class="n">bits</span><span class="p">,</span><span class="n">DoSvc</span><span class="p">,</span><span class="n">cryptsvc</span> <span class="n">-Force</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果之前已经卡了很久，建议直接重启系统。我的情况就是代理配置正确后仍然卡在 0%，重启清掉 CBS pending 状态后才成功。</p>
<h2 id="重新安装-openssh-server">
<a class="header-anchor" href="#%e9%87%8d%e6%96%b0%e5%ae%89%e8%a3%85-openssh-server"></a>
重新安装 OpenSSH Server
</h2><p>重启后确认代理程序已经启动，端口能连通：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Test-NetConnection</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="py">1</span> <span class="n">-Port</span> <span class="mf">10809</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>然后执行：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">dism</span><span class="p">.</span><span class="py">exe</span> <span class="p">/</span><span class="n">Online</span> <span class="p">/</span><span class="nb">Add-Capability</span> <span class="p">/</span><span class="n">CapabilityName</span><span class="err">:</span><span class="n">OpenSSH</span><span class="p">.</span><span class="n">Server</span><span class="p">~~~~</span><span class="mf">0.0</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">0</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>也可以继续使用 PowerShell：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Add-WindowsCapability</span> <span class="n">-Online</span> <span class="n">-Name</span> <span class="n">OpenSSH</span><span class="p">.</span><span class="n">Server</span><span class="p">~~~~</span><span class="mf">0.0</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">0</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>注意 capability 名称最后是 <code>0.0.1.0</code>，不要写成 <code>0.0.1.</code>。</p>
<h2 id="安装后启用-sshd">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85%e5%90%8e%e5%90%af%e7%94%a8-sshd"></a>
安装后启用 sshd
</h2><p>安装成功后检查文件和服务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Test-Path</span> <span class="n">C:</span><span class="p">\</span><span class="n">Windows</span><span class="p">\</span><span class="n">System32</span><span class="p">\</span><span class="n">OpenSSH</span><span class="p">\</span><span class="n">sshd</span><span class="p">.</span><span class="py">exe</span>
</span></span><span class="line"><span class="cl"><span class="nb">Get-Service</span> <span class="n">sshd</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>启用并启动服务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Set-Service</span> <span class="n">-Name</span> <span class="n">sshd</span> <span class="n">-StartupType</span> <span class="n">Automatic</span>
</span></span><span class="line"><span class="cl"><span class="nb">Start-Service</span> <span class="n">-Name</span> <span class="n">sshd</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>开放防火墙 22 端口：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">New-NetFirewallRule</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-Name</span> <span class="s2">&#34;OpenSSH-Server-In-TCP&#34;</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-DisplayName</span> <span class="s2">&#34;OpenSSH SSH Server (sshd)&#34;</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-Enabled</span> <span class="n">True</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-Direction</span> <span class="n">Inbound</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-Protocol</span> <span class="n">TCP</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-Action</span> <span class="n">Allow</span> <span class="p">`</span>
</span></span><span class="line"><span class="cl">  <span class="n">-LocalPort</span> <span class="mf">22</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>如果规则已经存在，可以改成所有网络配置文件都生效：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Set-NetFirewallRule</span> <span class="n">-Name</span> <span class="s2">&#34;OpenSSH-Server-In-TCP&#34;</span> <span class="n">-Enabled</span> <span class="n">True</span> <span class="n">-Profile</span> <span class="n">Any</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="验证">
<a class="header-anchor" href="#%e9%aa%8c%e8%af%81"></a>
验证
</h2><p>查看服务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Get-Service</span> <span class="n">sshd</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>正常应该是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Status   : Running
</span></span><span class="line"><span class="cl">StartType: Automatic
</span></span></code></pre></td></tr></table>
</div>
</div><p>查看监听：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">netstat</span> <span class="n">-ano</span> <span class="n">-p</span> <span class="n">tcp</span> <span class="p">|</span> <span class="nb">Select-String</span> <span class="s2">&#34;:22 &#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>正常会看到：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">TCP    0.0.0.0:22    0.0.0.0:0    LISTENING
</span></span></code></pre></td></tr></table>
</div>
</div><p>局域网其他机器连接：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh 用户名@Windows主机IP
</span></span></code></pre></td></tr></table>
</div>
</div><p>例如：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ssh fjh1996@192.168.1.10
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="总结">
<a class="header-anchor" href="#%e6%80%bb%e7%bb%93"></a>
总结
</h2><p>这个问题的关键点是：</p>
<ol>
<li><code>http_proxy</code> / <code>https_proxy</code> 只影响当前进程，不足以让 Windows Update 服务走代理。</li>
<li><code>Add-WindowsCapability</code> 背后依赖 Windows Update、BITS 和 CBS。</li>
<li>需要同时配置 WinHTTP 代理和 BITS 服务账户代理。</li>
<li>如果 CBS 已经有 <code>RebootPending</code>，先重启，否则可能一直卡在 <code>DownloadProgress: [0 / 100]</code>。</li>
<li>安装成功后还要启动 <code>sshd</code> 服务并检查防火墙规则。</li>
</ol>
<p>最终有效流程就是：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="n">netsh</span> <span class="n">winhttp</span> <span class="nb">set </span><span class="n">proxy</span> <span class="nb">proxy-server</span><span class="p">=</span><span class="s2">&#34;http=127.0.0.1:10809;https=127.0.0.1:10809&#34;</span> <span class="nb">bypass-list</span><span class="p">=</span><span class="s2">&#34;localhost;127.0.0.1;&lt;local&gt;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">bitsadmin</span> <span class="p">/</span><span class="n">util</span> <span class="p">/</span><span class="n">setieproxy</span> <span class="n">localsystem</span> <span class="n">MANUAL_PROXY</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="mf">1</span><span class="err">:</span><span class="mf">10809</span> <span class="n">NULL</span>
</span></span><span class="line"><span class="cl"><span class="n">bitsadmin</span> <span class="p">/</span><span class="n">util</span> <span class="p">/</span><span class="n">setieproxy</span> <span class="n">networkservice</span> <span class="n">MANUAL_PROXY</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="mf">1</span><span class="err">:</span><span class="mf">10809</span> <span class="n">NULL</span>
</span></span><span class="line"><span class="cl"><span class="n">bitsadmin</span> <span class="p">/</span><span class="n">util</span> <span class="p">/</span><span class="n">setieproxy</span> <span class="n">localservice</span> <span class="n">MANUAL_PROXY</span> <span class="mf">127.0</span><span class="p">.</span><span class="py">0</span><span class="p">.</span><span class="mf">1</span><span class="err">:</span><span class="mf">10809</span> <span class="n">NULL</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">Restart-Service</span> <span class="n">wuauserv</span><span class="p">,</span><span class="n">bits</span><span class="p">,</span><span class="n">DoSvc</span><span class="p">,</span><span class="n">cryptsvc</span> <span class="n">-Force</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">dism</span><span class="p">.</span><span class="py">exe</span> <span class="p">/</span><span class="n">Online</span> <span class="p">/</span><span class="nb">Add-Capability</span> <span class="p">/</span><span class="n">CapabilityName</span><span class="err">:</span><span class="n">OpenSSH</span><span class="p">.</span><span class="n">Server</span><span class="p">~~~~</span><span class="mf">0.0</span><span class="p">.</span><span class="py">1</span><span class="p">.</span><span class="py">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">Set-Service</span> <span class="n">-Name</span> <span class="n">sshd</span> <span class="n">-StartupType</span> <span class="n">Automatic</span>
</span></span><span class="line"><span class="cl"><span class="nb">Start-Service</span> <span class="n">-Name</span> <span class="n">sshd</span>
</span></span></code></pre></td></tr></table>
</div>
</div>
        
        <hr><p>本文2026-04-28首发于<a href='https://csdn.fjh1997.top/'>猫猫鱼的小窝</a>，最后修改于2026-04-28</p>]]>
      </description>
      
    </item>
    
    

    <item>
      <title>VMware Workstation 虚拟网卡丢失 &#43; VMware Tools 复制粘贴失效的完整排查与修复</title>
      <link>https://csdn.fjh1997.top/posts/10604.html</link>
      <pubDate>Thu, 16 Apr 2026 14:38:00 &#43;0800</pubDate>
      <author>xxx@example.com (catcatyu)</author>
      <guid>https://csdn.fjh1997.top/posts/10604.html</guid>
      <description>
        <![CDATA[<h1>VMware Workstation 虚拟网卡丢失 + VMware Tools 复制粘贴失效的完整排查与修复</h1><p>作者：catcatyu（xxx@example.com）</p>
        
          <h2 id="问题背景">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af"></a>
问题背景
</h2><p>宿主机 Windows（VMware Workstation 17.6.0），虚拟机 Windows 7 SP1 32位。遇到两个问题：</p>
<ol>
<li>宿主机无法连接虚拟机（ping 不通）</li>
<li>修复网络后，VMware Tools 的复制粘贴功能不工作</li>
</ol>
<p>以下是完整的排查过程。</p>
<h2 id="问题一宿主机无法连接虚拟机">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e4%b8%80%e5%ae%bf%e4%b8%bb%e6%9c%ba%e6%97%a0%e6%b3%95%e8%bf%9e%e6%8e%a5%e8%99%9a%e6%8b%9f%e6%9c%ba"></a>
问题一：宿主机无法连接虚拟机
</h2><h3 id="现象">
<a class="header-anchor" href="#%e7%8e%b0%e8%b1%a1"></a>
现象
</h3><p>虚拟机 IP 为 <code>192.168.191.129</code>（NAT 模式），从宿主机 ping 100% 丢包：</p>
<pre tabindex="0"><code>ping 192.168.191.129
请求超时。
请求超时。
数据包: 已发送 = 2，已接收 = 0，丢失 = 2 (100% 丢失)
</code></pre><h3 id="排查过程">
<a class="header-anchor" href="#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b"></a>
排查过程
</h3><p>检查宿主机网卡状态：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Get-NetAdapter</span> <span class="p">|</span> <span class="nb">Format-Table</span> <span class="n">Name</span><span class="p">,</span> <span class="n">InterfaceDescription</span><span class="p">,</span> <span class="n">Status</span><span class="p">,</span> <span class="n">MacAddress</span> <span class="n">-AutoSize</span>
</span></span></code></pre></td></tr></table>
</div>
</div><pre tabindex="0"><code>Name                          InterfaceDescription                       Status      MacAddress
----                          --------------------                       ------      ----------
以太网                        Intel(R) Ethernet Connection (22) I219-LM  Up          F4-F1-9E-42-D8-DD
VMware Network Adapter VMnet1 VMware Virtual Ethernet Adapter for VMnet1 Not Present 00-50-56-C0-00-01
VMware Network Adapter VMnet8 VMware Virtual Ethernet Adapter for VMnet8 Not Present 00-50-56-C0-00-08
</code></pre><p>关键发现：VMnet1（Host-Only）和 VMnet8（NAT）状态都是 <code>Not Present</code>，<code>AdminStatus: Down</code>。</p>
<p>再看 IPv4 地址分配：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Get-NetIPAddress</span> <span class="n">-AddressFamily</span> <span class="n">IPv4</span> <span class="p">|</span> <span class="nb">Format-Table</span> <span class="n">InterfaceAlias</span><span class="p">,</span> <span class="n">IPAddress</span><span class="p">,</span> <span class="n">PrefixLength</span> <span class="n">-AutoSize</span>
</span></span></code></pre></td></tr></table>
</div>
</div><pre tabindex="0"><code>InterfaceAlias              IPAddress   PrefixLength
--------------              ---------   ------------
以太网                      10.30.17.50           24
Loopback Pseudo-Interface 1 127.0.0.1              8
</code></pre><p>宿主机只有物理网卡有 IP，VMware 虚拟网卡完全没有加载，自然没有到 <code>192.168.191.x</code> 网段的路由。</p>
<p>同时 VMware NAT Service 虽然在运行，但网卡驱动本身没有加载：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-powershell" data-lang="powershell"><span class="line"><span class="cl"><span class="nb">Get-Service</span> <span class="n">-Name</span> <span class="s1">&#39;VMware*&#39;</span> <span class="p">|</span> <span class="nb">Format-Table</span> <span class="n">Name</span><span class="p">,</span> <span class="n">DisplayName</span><span class="p">,</span> <span class="n">Status</span> <span class="n">-AutoSize</span>
</span></span></code></pre></td></tr></table>
</div>
</div><pre tabindex="0"><code>Name                   DisplayName          Status
----                   -----------          ------
VMware NAT Service     VMware NAT Service  Running
VmwareAutostartService VMware 自动启动服务  Stopped
</code></pre><h3 id="根因">
<a class="header-anchor" href="#%e6%a0%b9%e5%9b%a0"></a>
根因
</h3><p>VMware 虚拟网卡驱动未正确加载，网卡处于 <code>Not Present</code> 状态。NAT Service 虽然在跑，但没有对应的虚拟网卡承载流量。</p>
<h3 id="解决方法">
<a class="header-anchor" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95"></a>
解决方法
</h3><p>打开 VMware Workstation → Edit → Virtual Network Editor → 点击 &ldquo;Restore Defaults&rdquo;（需要管理员权限）。这会重新创建 VMnet1/VMnet8 并重装虚拟网卡驱动。</p>
<p>如果不行，还可以：</p>
<ul>
<li>在设备管理器中检查是否有被禁用或带感叹号的 VMware 网卡，右键启用或更新驱动</li>
<li>修复安装 VMware Workstation（运行安装程序选 Repair）</li>
</ul>
<p>恢复后虚拟机 IP 变为 <code>192.168.78.128</code>，网络连通。</p>
<h2 id="问题二vmware-tools-服务启动失败">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e4%ba%8cvmware-tools-%e6%9c%8d%e5%8a%a1%e5%90%af%e5%8a%a8%e5%a4%b1%e8%b4%a5"></a>
问题二：VMware Tools 服务启动失败
</h2><h3 id="现象-1">
<a class="header-anchor" href="#%e7%8e%b0%e8%b1%a1-1"></a>
现象
</h3><p>网络恢复后，SSH 进入虚拟机发现 VMware Tools 没有正常工作。</p>
<h3 id="排查过程-1">
<a class="header-anchor" href="#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b-1"></a>
排查过程
</h3><p>通过 SSH（paramiko）远程执行命令检查（注意：这台 VM 是 Windows 7，不是 Linux）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">sc query VMTools
</span></span></code></pre></td></tr></table>
</div>
</div><pre tabindex="0"><code>SERVICE_NAME: VMTools
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 183 (0xB7)
</code></pre><p>VMTools 服务状态为 <code>STOPPED</code>，退出码 <code>183</code>（<code>ERROR_ALREADY_EXISTS</code>）。</p>
<p>同时检查进程：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl">tasklist <span class="p">|</span> findstr /i vmtoolsd
</span></span></code></pre></td></tr></table>
</div>
</div><p>发现 <code>vmtoolsd.exe</code>（PID 1868）在用户会话（Console Session 1）里运行着——这是用户态的托盘进程，但系统服务层面的 VMTools 没有启动。</p>
<h3 id="根因-1">
<a class="header-anchor" href="#%e6%a0%b9%e5%9b%a0-1"></a>
根因
</h3><p>之前异常退出后残留了用户态 <code>vmtoolsd.exe</code> 进程，占用了资源，导致系统服务启动时报错 183（<code>ERROR_ALREADY_EXISTS</code>，资源冲突）。</p>
<h3 id="解决方法-1">
<a class="header-anchor" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95-1"></a>
解决方法
</h3><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl"><span class="p">:</span><span class="c1">: 先杀掉残留的 vmtoolsd 进程</span>
</span></span><span class="line"><span class="cl">taskkill /f /im vmtoolsd.exe
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">:</span><span class="c1">: 然后重新启动服务</span>
</span></span><span class="line"><span class="cl">net start VMTools
</span></span></code></pre></td></tr></table>
</div>
</div><p>执行后服务恢复正常：</p>
<pre tabindex="0"><code>SERVICE_NAME: VMTools
        STATE              : 4  RUNNING
        WIN32_EXIT_CODE    : 0
</code></pre><h2 id="问题三复制粘贴仍然不工作">
<a class="header-anchor" href="#%e9%97%ae%e9%a2%98%e4%b8%89%e5%a4%8d%e5%88%b6%e7%b2%98%e8%b4%b4%e4%bb%8d%e7%84%b6%e4%b8%8d%e5%b7%a5%e4%bd%9c"></a>
问题三：复制粘贴仍然不工作
</h2><h3 id="现象-2">
<a class="header-anchor" href="#%e7%8e%b0%e8%b1%a1-2"></a>
现象
</h3><p>VMTools 服务正常运行后，宿主机和虚拟机之间的复制粘贴仍然不可用。</p>
<h3 id="排查过程-2">
<a class="header-anchor" href="#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b-2"></a>
排查过程
</h3><h4 id="第一步检查用户态进程">
<a class="header-anchor" href="#%e7%ac%ac%e4%b8%80%e6%ad%a5%e6%a3%80%e6%9f%a5%e7%94%a8%e6%88%b7%e6%80%81%e8%bf%9b%e7%a8%8b"></a>
第一步：检查用户态进程
</h4><p>复制粘贴功能依赖两个 <code>vmtoolsd.exe</code> 进程：</p>
<ul>
<li>系统服务进程（Session 0）：负责基础的 Guest-Host 通信</li>
<li>用户态进程 <code>vmtoolsd.exe -n vmusr</code>（桌面会话）：负责加载 <code>dndcp.dll</code> 插件处理剪贴板同步和拖拽</li>
</ul>
<p>检查发现只有系统服务进程在运行，用户态进程缺失。</p>
<p>确认插件文件存在：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl"><span class="k">dir</span> <span class="s2">&#34;C:\Program Files\VMware\VMware Tools\plugins\vmusr&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>dndcp.dll</code>（拖拽和复制粘贴插件）文件完好。</p>
<p>注册表中 VMware User Process 启动项也存在，但重启后用户态进程就是没有自动拉起。</p>
<h4 id="第二步尝试手动启动用户态进程">
<a class="header-anchor" href="#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e5%b0%9d%e8%af%95%e6%89%8b%e5%8a%a8%e5%90%af%e5%8a%a8%e7%94%a8%e6%88%b7%e6%80%81%e8%bf%9b%e7%a8%8b"></a>
第二步：尝试手动启动用户态进程
</h4><p>由于 SSH 会话处于 Session 0（服务会话），直接 <code>start</code> 无法在 Session 1 的桌面上创建进程。通过创建批处理文件 + 计划任务的方式在用户桌面会话中启动：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="cl"><span class="k">echo</span> start <span class="s2">&#34;&#34;</span> <span class="s2">&#34;C:/PROGRA~1/VMware/VMware Tools/vmtoolsd.exe&#34;</span> -n vmusr <span class="p">&gt;</span> C:/vmusr.bat
</span></span><span class="line"><span class="cl">schtasks /create /tn <span class="s2">&#34;StartVMusr&#34;</span> /tr <span class="s2">&#34;C:/vmusr.bat&#34;</span> /sc once /st 00:00 /f /rl highest
</span></span><span class="line"><span class="cl">schtasks /run /tn <span class="s2">&#34;StartVMusr&#34;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>启动后确认两个进程都在运行：</p>
<ul>
<li>PID 1384 — Services 会话（系统服务）</li>
<li>PID 2772 — Console Session 1，ADMIN 用户（用户态）</li>
</ul>
<p>但复制粘贴仍然不工作，而且重启虚拟机后用户态进程又消失了。说明手动拉起只是临时方案，根本原因在别处。</p>
<h4 id="第三步检查-vmx-配置">
<a class="header-anchor" href="#%e7%ac%ac%e4%b8%89%e6%ad%a5%e6%a3%80%e6%9f%a5-vmx-%e9%85%8d%e7%bd%ae"></a>
第三步：检查 VMX 配置
</h4><p>检查虚拟机的 <code>.vmx</code> 配置文件（<code>D:\Windows 7\Windows 7.vmx</code>），发现只有：</p>
<pre tabindex="0"><code>isolation.tools.hgfs.disable = &#34;FALSE&#34;
</code></pre><p>缺少 copy/paste 相关的配置项。在 VMware Workstation 17 上，如果没有显式启用，默认可能是禁用的。</p>
<p>通过 rpctool 在 Guest 内确认 isolation 状态均为 <code>UNSET</code>，说明 VMX 层面没有显式配置。</p>
<h3 id="根因-2">
<a class="header-anchor" href="#%e6%a0%b9%e5%9b%a0-2"></a>
根因
</h3><p>两个原因叠加：</p>
<ol>
<li>VMX 配置文件中缺少 <code>isolation.tools.copy.disable = &quot;FALSE&quot;</code> 和 <code>isolation.tools.paste.disable = &quot;FALSE&quot;</code> 的显式配置，在 Workstation 17 上默认行为可能是禁用</li>
<li>由于 isolation 配置缺失，用户态 <code>vmtoolsd -n vmusr</code> 进程无法正常自动启动（负责剪贴板同步的进程缺失）</li>
</ol>
<p>也就是说，用户态进程不自动启动的根本原因就是 VMX 里缺少 isolation 配置。加上配置后，重启虚拟机用户态进程就能正常自动拉起了。</p>
<h3 id="解决方法-2">
<a class="header-anchor" href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95-2"></a>
解决方法
</h3><p>关闭虚拟机，在 <code>.vmx</code> 文件中添加以下三行：</p>
<pre tabindex="0"><code>isolation.tools.copy.disable = &#34;FALSE&#34;
isolation.tools.paste.disable = &#34;FALSE&#34;
isolation.tools.dnd.disable = &#34;FALSE&#34;
</code></pre><p>然后重新启动虚拟机。启动后验证：</p>
<ul>
<li>VMTools 服务正常运行（RUNNING）</li>
<li>用户态 <code>vmtoolsd -n vmusr</code>（Console Session 1）自动启动——之前一直无法自启的问题也一并解决</li>
<li>复制粘贴功能恢复正常</li>
</ul>
<h2 id="总结">
<a class="header-anchor" href="#%e6%80%bb%e7%bb%93"></a>
总结
</h2><table>
  <thead>
      <tr>
          <th>问题</th>
          <th>根因</th>
          <th>解决方法</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>宿主机 ping 不通虚拟机</td>
          <td>VMware 虚拟网卡驱动未加载（Not Present）</td>
          <td>Virtual Network Editor → Restore Defaults</td>
      </tr>
      <tr>
          <td>VMTools 服务启动失败（错误码 183）</td>
          <td>残留的用户态 vmtoolsd 进程占用资源</td>
          <td><code>taskkill /f /im vmtoolsd.exe</code> 后重启服务</td>
      </tr>
      <tr>
          <td>复制粘贴不工作 + 用户态 vmtoolsd 不自启</td>
          <td>VMX 缺少 isolation 配置，导致用户态进程无法自启</td>
          <td>在 vmx 中添加 copy/paste/dnd 的 disable=FALSE 配置后重启</td>
      </tr>
  </tbody>
</table>

        
        <hr><p>本文2026-04-16首发于<a href='https://csdn.fjh1997.top/'>猫猫鱼的小窝</a>，最后修改于2026-04-16</p>]]>
      </description>
      
        <category>运维排错</category>
      
    </item>
    
  </channel>
</rss>
