启用 openssh-server 服务
- 设置 -> 系统 -> 可选功能 -> 添加功能 -> OpenSSH 服务器 -> 等待安装完成
- Win + R -> 输入 services.msc -> 找到 OpenSSH SSH Server -> 属性 -> 启动类型改为自动,并点击启动
- 在 powershell 本地测试
ssh 用户名@127.0.0.1
,密码是系统登录密码,应该能进入新的 powershell
相关参考:开始使用适用于 Windows 的 OpenSSH - microsoft
更换端口
更换 ssh server 端口
- 找到 sshd 配置文件:
C:\ProgramData\ssh\sshd_config
- 修改
#Port 22
为Port 40022
(任意高位端口即可) - 保存,Win + R -> services.msc 中重启 OpenSSH Server 服务
更换防火墙端口
- 设置 -> 网络和 Internet -> 状态 -> Windows 防火墙 -> 弹出的 Windows 安全中心 点击高级设置
- 入站规则 -> 点击表头按名称排序 -> 应该可以找到名为
OpenSSH SSH Server (sshd)
的规则,这是添加可选功能时自动加上的,但因为没法修改这个规则的端口,所以等会可以把它禁用了 - 使用管理员身份打开 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"
- 回到刚刚的高级防火墙窗口,点一下出站规则 再点入站规则 刷新一下,按表头排序,就能找到 2 行 OpenSSH SSH Server 的规则,此时可以把旧的、带 (sshd) 后缀的规则给禁用了
测试连接
本地 powershell 输入 ssh 用户名@127.0.0.1 -p40022
,如果提示输入密码,则修改成功
关闭密码使用密钥连接
- 编辑
C:\ProgramData\ssh\sshd_config
- 将
#PubkeyAuthentication no
改成PubkeyAuthentication yes
- 将
#PasswordAuthentication yes
改成PasswordAuthentication no
- 保存,services.msc 中重启 OpenSSH Server 服务
注意要把前缀的 # 去掉
相关参考:强制SSH使用密钥认证禁止密码登录
将用户公钥上传到服务器
- 用户命令行中输入
ssh-keygen
,一路回车后,复制~/.ssh/id_rsa.pub
中的所有内容 - 在 win10 服务器中任意位置(比如桌面),创建一个
authorized_keys
的文本文件,将刚刚复制的内容粘贴进去,如果有多个用户公钥则按回车分开写入 - 将刚创建的文件,复制到
~/.ssh/
目录下即可 - 如果还是无法连接,那么说明你是管理员账户,需要在刚创建的文件的目录下,打开 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 默认连接命令行
- 打开 Powershell,输入
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:/Program Files/Git/bin/bash.exe" -PropertyType String -Force
,设置默认 shell 程序 - 再输入
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "-i -l" -PropertyType String -Force
,保证命令行能够从~/.bash_profile
中读取配置(来源) - 将以下指令写入配置,在 git bash 中通过
vi ~/.bashrc
输入
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
- 此时重新创建 ssh 连接,即可正常显示 git bash 内容
相关参考: