Windows 10/ssh

Windows 10/ssh

sshd

Windows 自带可选的 OpenSSH,可以通过设置 - app - windows features - optional features (旧版Windows 10 在控制面板 control - windows feature里)或PowerShell安装。

PoserShell (run with administrator) 安装 sshd:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

# Install the OpenSSH Client
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# Uninstall the OpenSSH Client
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
# Uninstall the OpenSSH Server
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup. 
Get-NetFirewallRule -Name *ssh*
# There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled
# If the firewall does not exist, create one
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

The default shell used by Windows OpenSSH server is the Windows command shell.

注意:如果更改了 Windows 的 env 环境变量,似乎需要在 PowerShell 里重启 sshd 才能在连接 ssh 后的 shell 里反映出来。

Windows 10 的 OpenSSH shell 里各硬盘盘符会映射为 / 根目录下的文件夹,如 C 盘会映射为 "/C:" (注意有个冒号)目录。

ssh-copy-id

Windows 10 安装的 OpenSSH 自带 ssh-keygen, 但是没有 ssh-copy-id, 可以自己写个简单的 ssh-copy-id.bat 脚本模拟 ssh-copy-id 功能。

openssh-server

Windows 10 自带(默认未启用)的 OpenSSH server 配置文件:

%PROGRAMDATA%/ssh/sshd_config

authorized_keys 文件位置:

  • 非 administrators 组用户:%USERPROFILE%/.ssh/authorized_keys
  • administrators 组用户:%PROGRAMDATA%/ssh/administrators_authorized_keys

注意这是因为傻逼微软在 sshd_config 里默认设置 administrators 用户使用单独的 authorized_keys 文件

Match Group administrators  
      AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

authorized_keys 文件必须保证只允许 SYSTEM 和对应用户(以及administrators也可以?)可以访问,否则无法公钥登录。我测试时怎么修改 %PROGRAMDATA%/ssh/administrators_authorized_keys 的 NTFS 文件权限也无法以 administrators 登录,最后把 sshd_config 里配置"administrators_authorized_keys" 的那2行注释掉,直接使用标准位置的 authorized_keys 文件(%USERPROFILE%/.ssh/authorized_keys),一下子就搞定了,只能说傻逼微软!

debug

先停止 sshd 服务,然后手动以 debug 模式开启 sshd 进程。

sc stop sshd
"C:\Windows\System32\OpenSSH\sshd.exe" -dd -E C:\sshd.log

Bug

测试 Windows 10 (LTSC 2019) 版的 OpenSSH 的 port forwarding 功能可能有 bug,怎么也无法转发成功。


Last update: 2020-08-03 04:58:44 UTC