在 Windows 系统安装 OpenSSHServer

需求

为什么需要在 Windows 服务器安装 SSH 服务?
最近做 Jenkins 发版系统的时候,因为线上服务器有部分为 Windows 系统,为了使其能更好的融入 Jenkins。能够被 Jenkins 远程传输文件或者执行命令。

  • 因为 Jenkins 服务器位于内网,不能通过增加 Windows 节点的方式(无法连接 Jenkins)
  • 所有最好能通过 SSH 方式由 Jenkins 去连接服务器

过程

  1. 前提条件,需要 PowerShell
  2. 下载 OpenSSH: https://github.com/PowerShell/Win32-OpenSSH/releases
    下载 64 位系统版本
  3. 安装 OpenSSH
    将下载好的压缩包,解压到目录:C:\Program Files
    ssh
    进入 OpenSSH 目录、用 powershell 运行 install-sshd.ps1 安装 OpenSSH 服务
    启动 OpenSSH 服务后即可通过 SSH 用密码进行连接
  4. 修改默认 shell
    连接成功后默认的 shell 是 Windows Command shell (cmd.exe) 程序,可以把默认的 shell 设置为 PowerShell。以管理员身份启动 PowerShell,然后执行下面的命令进行修改:
    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
    同理也可改为第三方 shell,比如 bash
    New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "d:\software\shell\bin\bash.exe " -PropertyType String -Force
  5. 配置免密登陆
    注意:服务端的配置文件在 C:\ProgramData\ssh 目录中
    cfg
    编辑配置文件 sshd_config
1
2
3
4
5
6
7
# 取消以下两行注释
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 注释末尾两行
#Match Group administrators
#AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

在用户家目录下创建 .ssh 目录 C:\Users\Administrator\.ssh
新建 authorized_keys 文件、用于保存客户端公钥 id_rsa.pub 内容,注意末尾不要有换行符

最后重启 OpenSSH 服务即可在对应客户端免密登陆

错误处理

  1. 在Powershell直接脚本时会出现:无法加载文件 ******.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"
    解决办法:powershell 界面执行 set-ExecutionPolicy RemoteSigned