安装 OpenSSH Server
官方文档
安装 OpenSSH
本人使用了 VirtualBox 虚拟安装的 windows server 2016 ,没有激活
也许是因为没有激活的原因,按照官方文档的 2 个安装方式都失败了!
简单记录失败情况
-
使用 Windows 设置来安装 OpenSSH
打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能”,在页面顶部选择“添加功能”,我这里根本找不到 OpenSSH 字样的东西
-
使用 PowerShell 安装 OpenSSH
执行 PS 命令:Get-WindowsCapabilityGet-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
最初总是返回错误:无法下载源文件!
然后去 Windows update ,也没有发现多处来什么补丁,后来在执行 PS 命令居然就不报错了!可是 Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH*’
没有任何返回!既不说有,也不说没有,什么鬼?
直接执行安装命令
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
这个倒是和文档中一样,返回结果如下
Path : Online : True RestartNeeded : False
但是,执行启动服务的指令 Start-Service sshd ,不认识!
查询系统组件服务也没有看到 OPENSSH
手动安装 OpenSSH Server
OpenSSH 官方仓库
PowerShell/Win32-OpenSSH
-
到仓库下载 OpenSSH-Win64.zip
-
然后解压到 C:\Program Files
-
使用 PS 查看内容的结果如下
zip 解压后,会有一层目录嵌套,可以自行解套PS C:\Program Files> cd .\OpenSSH-Win64
PS C:\Program Files\OpenSSH-Win64> ls目录: C:\Program Files\OpenSSH-Win64 Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2021/5/27 星期四 上午 0 15279 FixHostFilePermissions.ps1 :09 -a---- 2021/5/27 星期四 上午 0 14305 FixUserFilePermissions.ps1 :09 -a---- 2021/5/27 星期四 上午 0 16853 install-sshd.ps1 :09 -a---- 2021/5/27 星期四 上午 0 1787800 libcrypto.dll :10 -a---- 2021/5/27 星期四 上午 0 19452 LICENSE.txt :09 -a---- 2021/5/27 星期四 上午 0 570768 moduli :09 -a---- 2022/2/24 星期四 下午 14 3123 openssh-events.man :38 -a---- 2021/5/27 星期四 上午 0 14035 OpenSSHUtils.psd1 :09 -a---- 2021/5/27 星期四 上午 0 41721 OpenSSHUtils.psm1 :09 -a---- 2021/5/27 星期四 上午 0 323456 scp.exe :10 -a---- 2021/5/27 星期四 上午 0 329616 sftp-server.exe :10 -a---- 2021/5/27 星期四 上午 0 400784 sftp.exe :10 -a---- 2021/5/27 星期四 上午 0 509304 ssh-add.exe :10 -a---- 2021/5/27 星期四 上午 0 396176 ssh-agent.exe :10 -a---- 2021/5/27 星期四 上午 0 722296 ssh-keygen.exe :10 -a---- 2021/5/27 星期四 上午 0 571256 ssh-keyscan.exe :10 -a---- 2021/5/27 星期四 上午 0 157048 ssh-shellhost.exe :10 -a---- 2021/5/27 星期四 上午 0 1066872 ssh.exe :10 -a---- 2021/5/27 星期四 上午 0 1127312 sshd.exe :10 -a---- 2021/5/27 星期四 上午 0 2297 sshd_config_default :10 -a---- 2021/5/27 星期四 上午 0 13972 uninstall-sshd.ps1 :10
可以看到 ssh 相关的命令都已经在这里了,可以直接运行的!
其中 install-sshd.ps1 是安装文件 -
为了执行方便,加入到系统环境变量中
增加一个变量名 OPENSSH
变量值: C:\Program Files\OpenSSH-Win64
给 Path 增加一项 %OPENSSH%
-
安装 sshd 服务
打开 PS ,执行以下命令
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
[*] C:\Program Files\OpenSSH-Win64\moduli looks good [SC] SetServiceObjectSecurity 成功 [SC] ChangeServiceConfig2 成功 [SC] ChangeServiceConfig2 成功 sshd and ssh-agent services successfully installed
安装之前最好推出 360或防火墙之类,安装图示如下:
-
启动 sshd 服务
启动 sshd 服务
net start sshd
或者
Start-Service sshd停止 sshd 服务
net stop sshd
或者
Stop-Service sshd设置成自动
Set-Service -Name sshd -StartupType ‘Automatic’开启防火墙
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
以上操作和官方文档介绍的命令实际是一样的
虽然安装官方文档没法安装,但是,后续的命令还是有效的
# Start the sshd service 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. Run the following to verify if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) { Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..." New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 } else { Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists." }
-
确认 openssh 服务
-
测试 ssh 连接
$ ssh Administrator@192.168.1.101 -p 2222
提示输入密码,就代表 ok !
设置密钥登录
官方文档
OpenSSH 密钥管理
-
首先修改 sshd_config 配置文件
因为 ProgramData 是一个隐藏文件,还是使用 PS 命令来的简单!
PS C:\Users\Administrator> cd /
PS C:> ls -ah
PS C:\ProgramData> cd .\ssh
PS C:\ProgramData\ssh> ls目录: C:\ProgramData\ssh Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/2/24 星期四 下午 14 logs :40 -a---- 2022/2/24 星期四 下午 16 452 administrators_authorized_ke :08 -a---- 2022/2/24 星期四 下午 17 5 sshd.pid :05 -a---- 2022/2/24 星期四 下午 14 2312 sshd_config :56 -a---- 2022/2/24 星期四 下午 14 1393 ssh_host_dsa_key :40 -a---- 2022/2/24 星期四 下午 14 612 ssh_host_dsa_key.pub :40 -a---- 2022/2/24 星期四 下午 14 513 ssh_host_ecdsa_key :40 -a---- 2022/2/24 星期四 下午 14 184 ssh_host_ecdsa_key.pub :40 -a---- 2022/2/24 星期四 下午 14 411 ssh_host_ed25519_key :40 -a---- 2022/2/24 星期四 下午 14 104 ssh_host_ed25519_key.pub :40 -a---- 2022/2/24 星期四 下午 14 2610 ssh_host_rsa_key :40 -a---- 2022/2/24 星期四 下午 14 576 ssh_host_rsa_key.pub
PS C:\ProgramData\ssh> notepad .\sshd_config
找到 #PubkeyAuthentication yes ,去掉注释即可 -
重启 sshd 服务
Stop-Service sshd
Start-Service sshd -
配置公钥
按照惯性思维,开始直接将公钥放在了 C:\Users\Administrator.ssh ,结果死活不对!
阅读文档发现有这句话:
AuthorizedKeysFile
默认值为“.ssh/authorized_keys .ssh/authorized_keys2”。 如果路径不是绝对路径,则它相对于用户的主目录(或配置文件图像路径)。 示例: c:\users\user。 请注意,如果用户属于管理员组,则改为使用 %programdata%/ssh/administrators_authorized_keys。原来是要放在这里:
%programdata%/ssh/administrators_authorized_keys
而且文件名也必须是: administrators_authorized_keys还在刚才修改 sshd_config 的同样目录
PS C:\ProgramData\ssh> notepad.exe .\administrators_authorized_keys
cp 粘贴自己的公钥即可
使用 scp (ssh-copy-id)会复制到 C:\Users\username.ssh\authorized_keys
注意: notepad 保存文件的时候,总会带上.txt 后缀,必须去掉!
- 再来测试 ssh 连接
$ ssh Administrator@192.168.1.101 -p 2222
不再需要密码了!
- 测试一下 SFTP
$ sftp -P 2222 Administrator@192.168.1.101
或者
直接打开一个 Fz 程序,建立一个站点