admin管理员组

文章数量:1531428

安装 OpenSSH Server

官方文档
安装 OpenSSH

本人使用了 VirtualBox 虚拟安装的 windows server 2016 ,没有激活
也许是因为没有激活的原因,按照官方文档的 2 个安装方式都失败了!

简单记录失败情况

  1. 使用 Windows 设置来安装 OpenSSH

    打开“设置”,选择“应用”>“应用和功能”,然后选择“可选功能”,在页面顶部选择“添加功能”,我这里根本找不到 OpenSSH 字样的东西

  2. 使用 PowerShell 安装 OpenSSH
    执行 PS 命令:Get-WindowsCapability

     Get-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

  1. 到仓库下载 OpenSSH-Win64.zip

  2. 然后解压到 C:\Program Files

  3. 使用 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 是安装文件

  4. 为了执行方便,加入到系统环境变量中

    增加一个变量名 OPENSSH
    变量值: C:\Program Files\OpenSSH-Win64

给 Path 增加一项 %OPENSSH%

  1. 安装 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或防火墙之类,安装图示如下:

  2. 启动 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."
     }
    
  3. 确认 openssh 服务

  4. 测试 ssh 连接

    $ ssh Administrator@192.168.1.101 -p 2222
    提示输入密码,就代表 ok !

设置密钥登录

官方文档
OpenSSH 密钥管理

  1. 首先修改 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 ,去掉注释即可

  2. 重启 sshd 服务
    Stop-Service sshd
    Start-Service sshd

  3. 配置公钥

    按照惯性思维,开始直接将公钥放在了 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 后缀,必须去掉!

  1. 再来测试 ssh 连接

$ ssh Administrator@192.168.1.101 -p 2222
不再需要密码了!

  1. 测试一下 SFTP

$ sftp -P 2222 Administrator@192.168.1.101

或者
直接打开一个 Fz 程序,建立一个站点

本文标签: 密钥ServerWindowsOpenSSH