# 使用内网穿透连接本地电脑SSH并在wsl中使用

使用内网穿透连接本地电脑SSH

本文档介绍如何通过内网穿透实现远程SSH连接到本地WSL环境。
TODO:未实现window的ssh和linux一剪切换

实现目标

  • 通过公网IP访问本地WSL环境
  • 实现SSH远程连接
  • 使用NATAPP进行内网穿透

配置步骤

1. WSL SSH服务配置

首先需要在WSL中配置SSH服务器:

  1. 安装SSH服务器:
sudo apt update
sudo apt install openssh-server
  1. 编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config
  1. 确保以下配置项设置正确:
PasswordAuthentication yes  # 初期测试时可以开启密码认证
PermitRootLogin yes        # 如果需要root登录则开启
  1. 启动SSH服务:
sudo service ssh start
  1. 测试SSH服务状态:

可以通过以下几种方式确认SSH服务是否正常运行:

a. 检查服务状态:

sudo service ssh status

正常运行时会显示 “Active: active (running)”

b. 检查进程:

ps aux | grep ssh

应该能看到sshd进程在运行

c. 检查端口监听:

sudo netstat -tuln | grep 22

sudo ss -tuln | grep 22

应该能看到22端口处于LISTEN状态

d. 本地连接测试:

ssh localhost

ssh 127.0.0.1

如果能成功连接说明SSH服务运行正常

2. NATAPP配置

  1. 注册账号:

    • 访问 NATAPP官网 注册账号
    • 登录后点击左侧"购买隧道"
    • 选择隧道类型为TCP,本地端口设置为WSL的SSH端口(默认22)
    • 可以选择免费或付费隧道
  2. 下载和安装:

    • 在NATAPP官网下载对应系统版本的客户端
    • Windows系统下载后解压到任意目录
    • Linux系统可直接使用wget下载
  3. 获取authtoken:

    • 在网站后台"我的隧道"中查看
    • 点击复制获取authtoken
    • 这个authtoken是您的隧道登录凭证
  4. 运行NATAPP(两种方式):

    a) 使用config.ini方式(推荐):

    • 下载对应系统的config.ini文件到natapp.exe同级目录

    • 编辑config.ini,填入authtoken:

      #将本文件放置于natapp同级目录 程序将读取 [default] 段
      #在命令行参数模式时,本配置文件可为空
      [default]
      authtoken=                      #对应一条隧道的authtoken
      clienttoken=                    #对应客户端的clienttoken,将会忽略authtoken,若无请留空
      log=none                        #log 日志文件,可以是none代表不记录,可以是文件路径
      loglevel=DEBUG                  #日志等级 DEBUG, INFO, WARNING, ERROR 默认为DEBUG
      http_proxy=                     #代理设置 如 http://10.123.10.10:3128
      
    • 各配置项说明:

      • authtoken:必填,从网站后台获取的隧道authtoken
      • clienttoken:选填,客户端token,填写后会忽略authtoken
      • log:日志配置,可以是none或具体的文件路径
      • loglevel:日志级别,可选DEBUG、INFO、WARNING、ERROR
      • http_proxy:代理服务器设置,如需要可填写代理地址
    • Windows下直接双击natapp.exe运行

    b) 使用命令行参数方式:

    • Windows命令提示符:
      natapp.exe -authtoken=你的authtoken值
      
    • Linux/Mac终端:
      ./natapp -authtoken=你的authtoken值
      

    注意:输入参数时不要有多余的空格!

  5. Web管理界面:

    • 默认地址:http://127.0.0.1:4040
    • 可在隧道配置中开启或关闭
    • 用于开发测试和监控连接状态

注意:本文中未包含的图片引用:

  • 隧道购买界面截图
  • 客户端下载页面截图
  • 配置文件设置截图
  • 运行成功界面截图
    如需查看这些图片,请访问NATAPP新手图文教程

3. 连接测试

其他用户可以通过以下命令连接到你的WSL:

ssh username@natapp分配的域名 -p natapp分配的端口

安全建议

为了确保系统安全,建议采取以下措施:

  1. 配置SSH密钥认证替代密码认证
  2. 在WSL的防火墙中限制SSH访问
  3. 定期更改密码和密钥
  4. 监控SSH登录日志

故障排查

如果连接失败,请检查:

  1. WSL中SSH服务是否正常运行
  2. NATAPP客户端是否正常连接
  3. 端口转发是否正确配置
  4. 防火墙设置是否正确

常见问题解答(FAQ)

Q1: SSH应该安装在Windows还是WSL中?

推荐直接在WSL中安装SSH服务器:

  1. 优势:

    • WSL是完整的Linux环境,原生支持SSH服务
    • 直接安装避免Windows和WSL之间的额外配置
    • 更符合Linux的使用习惯和安全策略
  2. 如果安装在Windows:

    • 需要额外配置端口转发
    • 需要配置Windows和WSL之间的网络
    • 可能遇到权限和网络隔离问题
    • 配置复杂且可能存在稳定性问题
  3. 对WSL命令行的影响:

    • WSL中安装:可直接获得完整的WSL命令行环境
    • Windows中安装:需要额外配置才能访问WSL环境,可能存在兼容性问题

Q2: 使用WSL的SSH服务需要注意什么?

  1. 启动要求:

    • 是的,必须先启动WSL才能使用SSH服务
    • SSH服务需要手动启动或配置自启动
  2. 自动化解决方案:

    • 创建Windows计划任务在开机时启动WSL
    • 在WSL的/etc/profile~/.bashrc中添加SSH服务启动命令
    • 使用Windows批处理脚本组合以上操作
  3. 启动脚本示例:

@echo off
wsl -d Ubuntu -u root service ssh start

将此脚本保存为.bat文件,可以:

  • 手动运行
  • 添加到Windows启动项
  • 创建计划任务定时执行

注意:具体的自动启动配置可能需要根据你的WSL发行版和Windows版本进行调整。

Q3: Windows SSH的密码认证问题

1. 首次安装后的密码设置

Windows SSH服务使用Windows本地账户系统进行认证,具体说明:

  1. 默认密码:

    • Windows SSH没有独立的默认密码
    • 使用Windows用户账户的密码
    • 本地账户使用Windows登录密码
    • 域账户使用域密码
  2. 特殊情况 - Windows无密码账户:

    • 即使Windows账户没有设置密码,SSH默认也不允许空密码登录
    • 这是SSH服务的安全策略,与Windows登录策略无关
    • 如果确实需要允许空密码登录(不推荐),需要:
      • 修改SSH配置文件:C:\ProgramData\ssh\sshd_config
      • 设置:PermitEmptyPasswords yes
      • 重启SSH服务
    • 安全建议:
      • 强烈建议不要允许空密码登录
      • 即使Windows允许无密码登录,也应该为SSH访问设置密码
      • 或使用SSH密钥认证替代密码认证
  3. 登录方式:

    • 使用Windows用户名和对应密码
    • 格式:ssh username@hostname
    • 例如:ssh Administrator@localhost
2. 密码修改方法

有以下几种修改密码的方式:

  1. 通过Windows设置:

    • 按 Win+I 打开设置
    • 点击"账户"
    • 选择"登录选项"
    • 点击"密码"下的"更改"
  2. 通过命令提示符(管理员):

net user 用户名 新密码
  1. 通过PowerShell(管理员):
Set-LocalUser -Name "用户名" -Password (ConvertTo-SecureString -AsPlainText "新密码" -Force)
  1. 域账户密码:
    • 在域控制器上修改
    • 使用域管理工具
    • 或按Ctrl+Alt+Del在本机修改
3. 密码规则

Windows密码策略通常包含以下要求:

  1. 默认策略:

    • 最小长度:8个字符
    • 必须包含以下四类中的三类:
      • 大写字母 (A-Z)
      • 小写字母 (a-z)
      • 数字 (0-9)
      • 特殊字符 (!@#$%等)
    • 不能包含用户名
  2. 自定义策略:

    • 通过本地安全策略修改
    • 通过组策略修改(域环境)
    • 可以设置:
      • 最小密码长度
      • 密码复杂度要求
      • 密码历史记录
      • 最短密码使用期限
      • 最长密码使用期限
  3. 查看当前密码策略:

net accounts
4. 安全建议
  1. 密码最佳实践:

    • 使用强密码
    • 定期更改密码
    • 不同账户使用不同密码
    • 避免使用常见词组
  2. 建议配置:

    • 启用密码复杂度要求
    • 设置最小密码长度
    • 启用密码历史记录
    • 配置密码过期策略
  3. 更安全的方案:

    • 使用SSH密钥认证替代密码认证
    • 配置双因素认证
    • 限制允许登录的IP地址
    • 使用防火墙规则限制访问

Q4: 如何为SSH访问设置独立密码?

可以通过创建专用的SSH用户账户来实现SSH访问使用独立的密码,而不影响现有Windows登录密码。以下是具体步骤:

1. 创建专用SSH用户
  1. 使用管理员权限打开PowerShell,执行:
# 创建新用户
New-LocalUser -Name "sshuser" -Description "SSH专用账户" -NoPassword

# 设置密码
$Password = Read-Host -AsSecureString "输入SSH专用密码"
Set-LocalUser -Name "sshuser" -Password $Password

# 添加到Users组
Add-LocalGroupMember -Group "Users" -Member "sshuser"
  1. 限制用户权限(可选):
# 禁止本地登录
Set-LocalUser -Name "sshuser" -UserMayChangePassword $false -PasswordNeverExpires $true
2. 配置SSH服务
  1. 编辑SSH配置文件:
notepad C:\ProgramData\ssh\sshd_config
  1. 添加或修改以下配置:
# 允许特定用户
AllowUsers sshuser

# 禁止空密码
PermitEmptyPasswords no

# 密码认证设置
PasswordAuthentication yes
  1. 重启SSH服务:
Restart-Service sshd
3. 使用方法
  1. SSH连接命令:
ssh sshuser@hostname
  1. 修改SSH密码:
# 在Windows系统上执行
$Password = Read-Host -AsSecureString "输入新的SSH密码"
Set-LocalUser -Name "sshuser" -Password $Password
4. 安全建议
  1. 密码设置:

    • 使用强密码(至少12位)
    • 包含大小写字母、数字和特殊字符
    • 避免使用个人信息相关内容
    • 定期更换密码
  2. 账户安全:

    • 限制SSH用户的系统权限
    • 定期检查登录日志
    • 考虑使用SSH密钥替代密码认证
    • 设置登录失败次数限制
  3. 监控和维护:

    • 定期检查SSH服务日志
    • 监控异常登录尝试
    • 及时更新系统和SSH服务
    • 保持正确的文件权限

注意事项:

  • 创建专用SSH用户可以更好地控制和监控SSH访问
  • 建议定期更改SSH密码
  • 如果不再需要SSH访问,可以禁用或删除专用账户
  • 所有操作都需要管理员权限

Q5: 如何配置SSH密钥认证?

SSH密钥认证是一种比密码认证更安全的方式。以下是详细的配置步骤:

1. 生成SSH密钥对

在客户端电脑上打开PowerShell(可以按 Win+X 然后选择 Windows PowerShell 或 终端),然后执行:

# 使用ED25519(推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 或者使用RSA(如果需要更好的兼容性)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

例如:

ssh-keygen -t ed25519 -C "3300607756@qq.com"

系统会提示:

  1. Enter file in which to save the key (C:\Users\你的用户名\.ssh\id_ed25519):

    • 直接按回车,使用默认路径
  2. Enter passphrase (empty for no passphrase):

    • 可以设置一个密码短语(建议设置)
    • 或直接按回车不设置密码
  3. Enter same passphrase again:

    • 如果设置了密码短语,再次输入确认

完成后会在 C:\Users\你的用户名\.ssh\ 目录下生成两个文件:

  • id_ed25519(私钥文件)
  • id_ed25519.pub(公钥文件)
2. 配置服务器端
  1. 以管理员身份打开PowerShell,创建认证密钥目录:
# 创建目录
mkdir C:\ProgramData\ssh\administrators_authorized_keys
  1. 复制公钥内容到授权文件:
# 将公钥内容添加到授权文件
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Out-File -Encoding utf8 C:\ProgramData\ssh\administrators_authorized_keys -Append
  1. 设置正确的文件权限:
# 设置文件权限
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "NT AUTHORITY\SYSTEM:(F)" "BUILTIN\Administrators:(F)"
3. 修改SSH服务配置
  1. 用记事本打开SSH配置文件(以管理员身份):
notepad C:\ProgramData\ssh\sshd_config
  1. 在文件中找到或添加以下设置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys C:/ProgramData/ssh/administrators_authorized_keys
  1. 重启SSH服务使配置生效:
Restart-Service sshd
4. 测试密钥认证
# 测试本地连接
ssh localhost

# 如果使用NATAPP,使用NATAPP提供的地址测试
ssh username@server.natappfree.cc -p <NATAPP分配的端口>
5. 禁用密码认证(可选)

确认密钥认证正常工作后,可以禁用密码认证提高安全性:

  1. 编辑SSH配置文件:
notepad C:\ProgramData\ssh\sshd_config
  1. 修改或添加:
PasswordAuthentication no
  1. 重启SSH服务:
Restart-Service sshd
安全建议
  1. 密钥保护:

    • 私钥文件(id_ed25519)不要分享给任何人
    • 建议为私钥设置密码短语
    • 定期更换密钥对
  2. 权限设置:

    • 确保私钥文件只有所有者可以访问
    • 确保公钥文件和授权文件的权限正确
  3. 配置管理:

    • 备份私钥文件
    • 记录已授权的公钥
    • 定期审查授权密钥文件
常见问题解决
  1. 如果连接被拒绝:

    • 检查公钥是否正确添加
    • 验证文件权限
    • 查看SSH服务日志
  2. 如果提示权限错误:

# 检查SSH服务日志
Get-EventLog -LogName Application -Source "OpenSSH*" -Newest 20
  1. 使用建议:
    • 建议为私钥设置密码短语
    • 定期备份私钥文件
    • 可以在多台电脑上使用同一个密钥对

自动化脚本

Windows一键启动脚本

创建以下批处理脚本(保存为start_natapp.bat):

@echo off
echo 正在启动内网穿透服务...
echo ==================================

:: 1. 启动WSL的SSH服务
echo [1/3] 启动WSL SSH服务...
wsl -d Ubuntu -u root service ssh start
if %errorlevel% neq 0 (
    echo WSL SSH服务启动失败!
    pause
    exit /b 1
)
echo WSL SSH服务启动成功!

:: 2. 检查配置文件
echo [2/3] 检查NATAPP配置...
if not exist config.ini (
    echo 错误:找不到config.ini文件!
    echo 请确保config.ini与此脚本在同一目录。
    pause
    exit /b 1
)

:: 3. 启动NATAPP并保存输出
echo [3/3] 启动NATAPP服务...
echo ==================================
echo 正在获取映射地址,请稍候...
echo 如需退出请按Ctrl+C
echo ==================================

:: 创建日期时间戳
set datetime=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set datetime=%datetime: =0%

:: 运行NATAPP并将输出同时显示到屏幕和文件
natapp.exe 2>&1 | tee natapp_%datetime%.log

:: 如果NATAPP异常退出
if %errorlevel% neq 0 (
    echo NATAPP运行出错!
    echo 请检查配置文件和网络连接。
    pause
    exit /b 1
)

pause

使用说明:

  1. 将此脚本放在NATAPP程序(natapp.exe)所在目录
  2. 确保config.ini配置文件已正确设置
  3. 双击运行脚本即可

脚本功能:

  • 自动启动WSL的SSH服务
  • 检查必要的配置文件
  • 启动NATAPP服务
  • 将运行日志保存到文件(包含时间戳)
  • 在控制台显示映射地址
  • 错误处理和提示

注意事项:

  • 需要有正确配置的config.ini文件
  • WSL需要安装并配置好Ubuntu
  • 首次运行可能需要管理员权限
  • 日志文件会保存在脚本所在目录

使用实例

实例1:NATAPP连接信息解读

当你成功运行NATAPP后,会看到类似以下输出:

Powered By NATAPP       Please visit https://natapp.cn
(Ctrl+C to Quit)
Tunnel Status           Online
Version                 2.4.0
Forwarding             tcp://server.natappfree.cc:43098 -> 127.0.0.1:22
Web Interface          http://127.0.0.1:4040
Total Connections      0

各项信息说明:

  1. Tunnel Status: Online - 表示隧道已成功建立
  2. Version: 2.4.0 - NATAPP客户端版本
  3. Forwarding - 最重要的信息:
    • tcp://server.natappfree.cc:43098 是公网访问地址
    • -> 127.0.0.1:22 表示转发到本地的SSH端口
  4. Web Interface - NATAPP的Web管理界面地址
  5. Total Connections - 当前连接数

使用方法:

  1. 记录公网访问地址:

    • 域名:server.natappfree.cc
    • 端口:43098
  2. SSH连接命令示例:

ssh username@server.natappfree.cc -p 43098

如:

ssh yuuu@server.natappfree.cc -p 43098

注意事项:

  • 每次启动NATAPP分配的端口可能不同
  • 免费版的域名和端口会动态变化
  • 付费版可以获得固定的域名和端口

实例2:SSH连接错误排查

当尝试SSH连接时,遇到以下错误:

root@server.natappfree.cc's password:
Permission denied, please try again.

这个错误表示SSH连接被拒绝,可能的原因:

  1. 密码错误:

    • 确保输入的密码正确
    • 注意大小写敏感
    • 检查输入法状态
  2. SSH配置问题:

    • 检查/etc/ssh/sshd_config中的设置:
      PasswordAuthentication yes  # 确保已启用密码认证
      PermitRootLogin yes        # 如果使用root登录,确保此项为yes
      
    • 修改配置后需要重启SSH服务:
      sudo service ssh restart
      
  3. 权限问题:

    • 确保用户账户存在且已激活
    • 检查用户是否有登录权限
    • 检查home目录权限
  4. 解决步骤:
    a. 首先验证本地SSH服务是否正常:

    ssh localhost
    

    b. 检查SSH配置文件权限:

    sudo chmod 644 /etc/ssh/sshd_config
    

    c. 检查并重置用户密码:

    sudo passwd username  # 替换为实际用户名
    
  5. 建议:

    • 先使用非root用户测试连接
    • 启用SSH日志查看详细错误信息:
      sudo tail -f /var/log/auth.log
      
    • 考虑使用SSH密钥认证替代密码认证

实例3:SSH首次连接主机验证

当首次通过SSH连接到NATAPP分配的地址时,会看到以下提示:

The authenticity of host '[server.natappfree.cc]:38823 ([112.74.89.58]:38823)' can't be established.
ED25519 key fingerprint is SHA256:xOY8J/zXf41EWrnpXF923mAfNg9Db/rboTpIauiNi9E.
This host key is known by the following other names/addresses:
    C:\Users\yuuu/.ssh/known_hosts:5: localhost
    C:\Users\yuuu/.ssh/known_hosts:8: [server.natappfree.cc]:43098
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

这个提示的含义:

  1. 安全验证:

    • SSH客户端首次连接到新服务器时的安全验证机制
    • 用于防止中间人攻击
    • 显示服务器的密钥指纹供验证
  2. 提示信息解析:

    • 主机地址:server.natappfree.cc:38823
    • IP地址:112.74.89.58:38823
    • 密钥类型:ED25519
    • 密钥指纹:SHA256格式
  3. known_hosts文件:

    • 显示该主机密钥已被其他地址使用
    • localhost:说明之前本地连接使用过
    • 不同端口的natapp地址:因为每次启动端口会变化
  4. 处理方法:

    • 首次连接时输入"yes"接受并保存密钥
    • 密钥会被保存到 ~/.ssh/known_hosts 文件
    • 后续连接如果密钥匹配则不会再提示

注意事项:

  • 这是正常的SSH安全机制,首次连接都会出现
  • 如果已知主机突然出现此提示,需要警惕可能的安全问题
  • 使用NATAPP时,因为端口经常变化,这个提示会经常出现
  • 可以通过配置SSH客户端来自动接受NATAPP域名的新密钥

实例4:SSH主机密钥变更警告

当SSH连接时遇到以下警告:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:88ZyVxlafbcF8Y4XxNIi/cGz6YrEenrrphg1xs3PqUc.
Please contact your system administrator.
Add correct host key in C:\Users\yuuu/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in C:\Users\yuuu/.ssh/known_hosts:10
Host key for 127.0.0.1 has changed and you have requested strict checking.
Host key verification failed.

这个警告的含义和处理方法:

  1. 警告原因:

    • SSH检测到目标主机的密钥与已保存的不匹配
    • 可能是主机重新安装了SSH服务
    • 可能是使用了不同的SSH服务(如从WSL切换到Windows SSH)
    • 在使用NATAPP时,可能是因为重新启动服务导致
  2. 安全含义:

    • 这是SSH的重要安全机制
    • 用于防止中间人攻击
    • 当主机密钥改变时发出警告
    • 需要用户确认这个改变是预期的
  3. 警告信息解析:

    • 主机标识已改变的警告
    • 新的ED25519密钥指纹
    • 问题密钥在known_hosts文件中的位置(第10行)
    • 受影响的主机地址(127.0.0.1)
  4. 解决方法:

    a. 如果确认是安全的(比如知道服务器刚重装),删除旧的密钥:

    # 删除特定行的密钥(这里是第10行)
    sed -i '10d' ~/.ssh/known_hosts
    
    # 或者删除特定主机的所有密钥
    ssh-keygen -R 127.0.0.1
    

    b. 如果使用NATAPP,可以:

    # 删除特定域名的所有密钥
    ssh-keygen -R server.natappfree.cc
    
    # 或者编辑SSH配置文件放宽对NATAPP域名的验证
    echo "Host server.natappfree.cc" >> ~/.ssh/config
    echo "    StrictHostKeyChecking no" >> ~/.ssh/config
    
  5. 安全建议:

    • 首次连接到新主机时要验证密钥指纹
    • 对于固定服务器,密钥变化时要谨慎确认
    • 对于NATAPP这类动态服务,可以适当放宽验证
    • 定期备份known_hosts文件
    • 如果在意外情况下看到此警告,需要警惕可能的安全问题
  6. 预防措施:

    • 在重装SSH服务前备份主机密钥
    • 使用配置管理工具统一管理主机密钥
    • 记录服务器的密钥指纹以便验证
    • 对重要服务器保持严格的密钥检查

注意事项:

  • 不要盲目删除known_hosts中的记录
  • 在公共网络环境要特别注意此类警告
  • 如果不确定,先咨询系统管理员
  • 可以使用ssh-keygen -l -f命令查看密钥指纹

实例5:手动配置SSH密钥认证(解决权限问题)

当使用PowerShell命令遇到权限问题时,可以通过手动操作文件系统来配置SSH密钥认证:

1. 准备工作
  1. 确保已经生成了SSH密钥对:

    • 检查 C:\Users\你的用户名\.ssh\ 目录下是否有 id_ed25519.pub 文件
    • 如果没有,请先按照前面的说明生成密钥对
  2. 以管理员身份打开文件资源管理器:

    • 按 Win+R 打开运行对话框
    • 输入 explorer
    • 按住 Ctrl+Shift+Enter 以管理员身份运行
2. 创建并设置授权文件
  1. 导航到SSH配置目录:

    • 打开 C:\ProgramData\ssh\ 目录
    • 如果目录不存在,手动创建它
  2. 创建授权文件:

    • 在记事本中新建文件
    • 复制 C:\Users\你的用户名\.ssh\id_ed25519.pub 文件的内容
    • 将内容粘贴到新文件中
    • 保存为 C:\ProgramData\ssh\administrators_authorized_keys
    • 确保文件没有 .txt 扩展名
  3. 设置文件权限:
    a. 右键点击 administrators_authorized_keys 文件
    b. 选择"属性"
    c. 点击"安全"标签
    d. 点击"高级"
    e. 点击"禁用继承"
    f. 选择"删除所有继承的权限"
    g. 点击"添加"
    h. 依次添加以下权限:

    • 主体:SYSTEM,权限:完全控制
    • 主体:Administrators,权限:完全控制
      i. 点击"应用"并确认所有更改
3. 验证配置
  1. 检查文件权限:

    • 右键点击文件
    • 属性 -> 安全
    • 确保只有 SYSTEM 和 Administrators 有权限
  2. 重启SSH服务:

    • 按 Win+R
    • 输入 services.msc
    • 找到 “OpenSSH SSH Server”
    • 右键选择"重新启动"
  3. 测试连接:

ssh localhost
常见问题解决
  1. 如果文件扩展名问题:

    • 在文件资源管理器中启用"文件扩展名"显示
    • 确保文件名没有 .txt 后缀
  2. 如果权限设置失败:

    • 确保使用管理员权限的文件资源管理器
    • 尝试先删除文件,重新创建
  3. 如果仍然无法连接:

    • 检查 SSH 服务是否正在运行
    • 查看 Windows 事件查看器中的系统日志
    • 确认公钥内容是否正确复制(没有多余的换行或空格)
安全注意事项
  1. 文件权限:

    • 严格限制文件访问权限
    • 定期检查权限设置是否被更改
  2. 内容验证:

    • 确保复制的公钥内容完整
    • 不要添加任何额外字符
    • 每行公钥应该是单独的一行
  3. 备份建议:

    • 保存原始公钥文件的备份
    • 记录配置步骤以便将来参考

Windows SSH vs WSL SSH 对比

下表详细对比了Windows SSH和WSL SSH的主要区别:

对比方面Windows SSHWSL SSH
架构实现• 作为原生Windows服务运行
• 使用Windows原生API和系统调用
• 完全集成到Windows服务管理框架
• 在Linux子系统环境中运行
• 使用Linux系统调用和API
• 遵循Linux服务管理模式
网络和端口• 直接绑定到Windows网络栈
• 默认监听所有网络接口的22端口
• 可以直接访问Windows网络资源
• 通过WSL网络虚拟化层运行
• 在WSL网络命名空间中监听22端口
• 需要通过WSL网络转发才能从外部访问
文件系统访问• 只能直接访问Windows文件系统
• 使用Windows路径格式(C:\)
• 受Windows文件权限控制
• 可以访问WSL文件系统
• 可以通过/mnt访问Windows文件系统
• 使用Linux路径格式(/)
• 同时支持Windows和Linux权限模型
权限和安全• 使用Windows用户账户和组
• 基于Windows ACL权限系统
• 集成Windows安全策略
• 使用Linux用户和组
• 基于Linux权限模型(rwx)
• 遵循Linux安全机制
适用场景• 需要直接访问Windows资源
• 管理Windows服务器
• 与Windows特定工具集成
• Linux开发环境访问
• 运行Linux工具和命令
• 需要Linux特性的场景
配置管理• 配置文件位于Windows系统目录
• 通过Windows服务管理工具管理
• 使用Windows事件日志
• 配置文件在/etc/ssh/目录
• 通过Linux service命令管理
• 使用Linux系统日志
性能特点• 直接运行在物理机上
• 较低的系统开销
• 原生性能表现
• 运行在WSL层之上
• 可能有轻微的性能开销
• 受WSL架构影响
维护和故障排查• 使用Windows工具进行诊断
• 通过Windows日志查看问题
• Windows风格的错误处理
• 使用Linux工具进行诊断
• 通过Linux日志系统排查
• Linux风格的错误处理
潜在冲突• 默认占用22端口
• 可能与WSL SSH冲突
• 需要配置Windows防火墙
• 默认占用22端口
• 可能与Windows SSH冲突
• 需要配置WSL网络转发

选择建议

  1. 选择Windows SSH如果:

    • 主要在Windows环境下工作
    • 需要管理Windows服务器
    • 需要与Windows特定工具集成
    • 对原生性能有较高要求
  2. 选择WSL SSH如果:

    • 主要进行Linux开发
    • 需要完整的Linux环境
    • 需要使用Linux特定工具
    • 习惯Linux的工作方式
  3. 最佳实践:

    • 避免同时运行两个SSH服务
    • 根据主要使用场景选择合适的实现
    • 注意端口冲突和网络配置
    • 定期更新和维护所选的SSH服务

Windows SSH服务配置指南

本节详细介绍如何在Windows系统中安装、配置和使用SSH服务。

1. 安装SSH服务

Windows 10和Windows Server 2019及更高版本原生支持SSH服务。有两种安装方式:

方式一:通过设置安装
  1. 打开Windows设置
  2. 点击"应用"
  3. 点击"可选功能"
  4. 点击"添加功能"
  5. 搜索并选择:
    • “OpenSSH 服务器”
    • “OpenSSH 客户端”(可能已预装)
  6. 点击"安装"
方式二:通过PowerShell安装

以管理员身份运行PowerShell,执行以下命令:

# 检查SSH服务状态
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

# 安装SSH服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 安装SSH客户端(如果需要)
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

2. 配置SSH服务

2.1 启动SSH服务

以管理员身份运行PowerShell,执行:

# 启动SSH服务
Start-Service sshd

# 设置自动启动
Set-Service -Name sshd -StartupType 'Automatic'

# 确认防火墙规则
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}
2.2 配置SSH服务

SSH服务的配置文件位于:C:\ProgramData\ssh\sshd_config

  1. 备份原配置:
Copy-Item "C:\ProgramData\ssh\sshd_config" "C:\ProgramData\ssh\sshd_config.bak"
  1. 编辑配置文件(使用记事本或PowerShell ISE):
notepad C:\ProgramData\ssh\sshd_config

主要配置项说明:

# 端口设置(默认22)
Port 22

# 允许密码认证
PasswordAuthentication yes

# 允许公钥认证
PubkeyAuthentication yes

# 允许root/管理员登录
PermitRootLogin yes

# 空密码限制
PermitEmptyPasswords no

# 最大认证尝试次数
MaxAuthTries 6

# 客户端保活设置
ClientAliveInterval 120
ClientAliveCountMax 3
  1. 修改配置后重启服务:
Restart-Service sshd

3. SSH密钥配置

3.1 生成SSH密钥
# 生成新的SSH密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"

# 或使用RSA(如果需要更广泛的兼容性)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
3.2 配置授权密钥
  1. 创建授权密钥文件:
# 创建.ssh目录(如果不存在)
mkdir ~\.ssh

# 创建授权密钥文件
New-Item -Path ~\.ssh\authorized_keys -ItemType File
  1. 添加公钥到授权文件:
# 将公钥内容添加到authorized_keys
Add-Content ~\.ssh\authorized_keys "ssh-ed25519 AAAA..."

4. 使用SSH服务

4.1 基本命令
  1. 连接到远程服务器:
# 使用密码认证
ssh username@hostname

# 使用指定端口
ssh username@hostname -p 2222

# 使用密钥认证
ssh -i C:\path\to\private_key username@hostname
  1. 文件传输:
# 从远程复制到本地
scp username@hostname:/path/to/remote/file C:\local\path

# 从本地复制到远程
scp C:\local\file username@hostname:/remote/path
4.2 SSH配置文件

%UserProfile%\.ssh\config 创建配置文件:

# 默认设置
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

# 特定服务器设置
Host myserver
    HostName server.example.com
    User myusername
    Port 2222
    IdentityFile C:\path\to\private_key

5. 服务管理

5.1 查看服务状态
# 查看服务状态
Get-Service sshd

# 查看详细信息
Get-Service sshd | Select-Object *
5.2 启动和停止服务
# 启动服务
Start-Service sshd

# 停止服务
Stop-Service sshd

# 重启服务
Restart-Service sshd
5.3 查看日志
# 查看SSH服务日志
Get-EventLog -LogName Application -Source "OpenSSH*" -Newest 20

6. 安全建议

  1. 基本安全配置:

    • 禁用密码认证,使用密钥认证
    • 更改默认端口(可选)
    • 限制登录尝试次数
    • 配置防火墙规则
  2. 配置示例:

# 禁用密码认证
PasswordAuthentication no

# 禁用空密码
PermitEmptyPasswords no

# 禁用root登录
PermitRootLogin no

# 限制登录尝试
MaxAuthTries 3

# 使用强密钥算法
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
  1. 文件权限设置:
# 设置配置文件权限
icacls "C:\ProgramData\ssh\sshd_config" /inheritance:r /grant "NT AUTHORITY\SYSTEM:(F)" "BUILTIN\Administrators:(F)"

7. 故障排查

  1. 常见问题:

    • 连接被拒绝
    • 认证失败
    • 服务无法启动
    • 端口冲突
  2. 排查步骤:
    a. 检查服务状态:

    Get-Service sshd
    

    b. 检查防火墙:

    Get-NetFirewallRule -Name *OpenSSH*
    

    c. 检查端口占用:

    netstat -ano | findstr :22
    

    d. 查看详细日志:

    Get-EventLog -LogName Application -Source "OpenSSH*" -Newest 20
    
  3. 解决方案:

    • 重置服务配置
    • 清理并重新生成主机密钥
    • 检查文件权限
    • 验证网络连接

8. 关闭SSH服务

  1. 临时关闭:
Stop-Service sshd
  1. 禁用自动启动:
Set-Service -Name sshd -StartupType 'Disabled'
  1. 完全卸载:
# 卸载SSH服务器
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 卸载SSH客户端(如果需要)
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
  1. 清理配置:
# 删除SSH文件夹(可选)
Remove-Item -Path "C:\ProgramData\ssh" -Recurse -Force

远程ssh之后,可以使用vscode远程链接代码,并且可以通过路径设置为mnt/来远程到win的系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值