为 win10 启用 ssh server 并配置安全连接

启用 openssh-server 服务

  1. 设置 -> 系统 -> 可选功能 -> 添加功能 -> OpenSSH 服务器 -> 等待安装完成
  2. Win + R -> 输入 services.msc -> 找到 OpenSSH SSH Server -> 属性 -> 启动类型改为自动,并点击启动
  3. 在 powershell 本地测试 ssh 用户名@127.0.0.1 ,密码是系统登录密码,应该能进入新的 powershell

相关参考:开始使用适用于 Windows 的 OpenSSH - microsoft

更换端口

更换 ssh server 端口

  1. 找到 sshd 配置文件:C:\ProgramData\ssh\sshd_config
  2. 修改 #Port 22Port 40022 (任意高位端口即可)
  3. 保存,Win + R -> services.msc 中重启 OpenSSH Server 服务

更换防火墙端口

  1. 设置 -> 网络和 Internet -> 状态 -> Windows 防火墙 -> 弹出的 Windows 安全中心 点击高级设置
  2. 入站规则 -> 点击表头按名称排序 -> 应该可以找到名为 OpenSSH SSH Server (sshd)的规则,这是添加可选功能时自动加上的,但因为没法修改这个规则的端口,所以等会可以把它禁用了
  3. 使用管理员身份打开 Powershell,输入指令 New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 40022 -Program "C:\Windows\System32\OpenSSH\sshd.exe"
  4. 回到刚刚的高级防火墙窗口,点一下出站规则 再点入站规则 刷新一下,按表头排序,就能找到 2 行 OpenSSH SSH Server 的规则,此时可以把旧的、带 (sshd) 后缀的规则给禁用了

测试连接

本地 powershell 输入 ssh 用户名@127.0.0.1 -p40022,如果提示输入密码,则修改成功

关闭密码使用密钥连接

  1. 编辑 C:\ProgramData\ssh\sshd_config
  2. #PubkeyAuthentication no改成 PubkeyAuthentication yes
  3. #PasswordAuthentication yes改成 PasswordAuthentication no
  4. 保存,services.msc 中重启 OpenSSH Server 服务
注意要把前缀的 # 去掉

相关参考:强制SSH使用密钥认证禁止密码登录

将用户公钥上传到服务器

  1. 用户命令行中输入 ssh-keygen,一路回车后,复制 ~/.ssh/id_rsa.pub中的所有内容
  2. 在 win10 服务器中任意位置(比如桌面),创建一个 authorized_keys的文本文件,将刚刚复制的内容粘贴进去,如果有多个用户公钥则按回车分开写入
  3. 将刚创建的文件,复制到 ~/.ssh/目录下即可
  4. 如果还是无法连接,那么说明你是管理员账户,需要在刚创建的文件的目录下,打开 Powershell,执行以下命令(以下指令保证了权限的一致性,直接复制的文件因为权限问题不会直接生效)
# Get the public key file generated previously on your client
$authorizedKey = Get-Content -Path .\authorized_keys

# Generate the PowerShell to be run remote that will copy the public key file generated previously on your client to the authorized_keys file on your server
powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '''$authorizedKey''';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F""

相关参考:Windows 版 OpenSSH 中的基于密钥的身份验证 - microsoft

将 Git Bash (MinGW64) 设为 ssh 默认连接命令行

  1. 打开 Powershell,输入 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:/Program Files/Git/bin/bash.exe" -PropertyType String -Force,设置默认 shell 程序
  2. 再输入 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "-i -l" -PropertyType String -Force,保证命令行能够从 ~/.bash_profile中读取配置(来源)
  3. 将以下指令写入配置,在 git bash 中通过 vi ~/.bashrc输入
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
  1. 此时重新创建 ssh 连接,即可正常显示 git bash 内容

相关参考:

  1. PowerShell/Win32-OpenSSH DefaultShell - github
  2. git-bash ssh命令远程连接mac服务器 中文乱码的问题 - CSDN
最后修改:2024 年 07 月 17 日 03 : 53 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论