Win11 SSH 连接与编码架构配置

主机别名 win11 = 192.168.31.225(root@22)
系统:Windows 11 IoT Enterprise LTSC(NTLite 精简镜像)

一、Linux 端 SSH 配置

~/.ssh/config

text

Host win11
    HostName 192.168.31.225
    User root
    Port 22
    IdentityFile ~/.ssh/id_ed25519
    RequestTTY yes
    SetEnv LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8

二、Win11 端默认 Shell 改为 PowerShell

OpenSSH 默认启动 cmd,改为 PowerShell:

cmd

reg add "HKLM\SOFTWARE\OpenSSH" /v DefaultShell /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" /f
net stop sshd
net start sshd

注意:修改 DefaultShell 后,SSH 远程命令直接使用 PowerShell 语法(用 ; 连接多个命令),不再支持 cmd 的 && 语法。

三、编码架构(核心设计)

3.1 问题背景

设置终端中文 GUI 软件问题
系统区域设为英文(ACP=1252/OEMCP=437)✅ 正常❌ 乱码GUI 软件显示异常
系统区域设为中文(ACP=936)❌ GBK 输出✅ 正常SSH 远程查看终端乱码
全局开启 UTF-8 Beta(65001)✅ 可能正常⚠️ 风险老软件兼容性问题

3.2 最终方案:两层解耦

设置目的
系统区域zh-CN(ACP=936, OEMCP=936)中文 GUI、老软件正常显示
SSH 会话PowerShell profile 检测到 SSH_CONNECTION 时强制 UTF-8Linux 端无乱码
本地控制台不做干预,跟随系统默认 GBK与老软件保持一致

3.3 关键文件

C:\Users\root\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

必须使用 UTF-8 with BOM 编码保存:

powershell

Remove-Item Alias:curl -ErrorAction SilentlyContinue
Remove-Item Alias:wget -ErrorAction SilentlyContinue

if ($env:SSH_CONNECTION) {
    [Console]::InputEncoding = [System.Text.Encoding]::UTF8
    [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
}

3.4 前置条件:执行策略

Profile 能正常加载的前提是 PowerShell 执行策略允许运行脚本:

powershell

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

注意: 重启后执行策略可能被重置。若 SSH 连接后仍乱码,先检查策略状态:

powershell

Get-ExecutionPolicy   # 应为 RemoteSigned

四、验证方法

bash

ssh win11 'chcp'                    # 输出:Active code page: 65001
ssh win11 'Write-Host 中文测试'      # 输出正常即配置生效

在 Win11 本地控制台(cmd)中运行 chcp 显示 936 属于正常行为。

五、回滚操作

powershell

# 删除 profile,SSH 会话恢复 GBK 编码
Remove-Item $PROFILE

# 恢复 cmd 为默认 Shell
reg add "HKLM\SOFTWARE\OpenSSH" /v DefaultShell /t REG_SZ /d "C:\Windows\System32\cmd.exe" /f

六、总结

组件编码说明
系统区域GBK(936)保证中文 GUI 软件正常显示
SSH 会话UTF-8(65001)仅在远程连接时切换,不影响本地
本地控制台GBK(936)跟随系统默认,避免影响老软件

核心思路: 通过 PowerShell Profile 动态检测连接来源,仅在 SSH 会话中切换为 UTF-8,实现系统层与远程会话层的编码解耦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值