在 Windows 系统安装 OpenSSHServer
需求
为什么需要在 Windows 服务器安装 SSH 服务?
最近做 Jenkins 发版系统的时候,因为线上服务器有部分为 Windows 系统,为了使其能更好的融入 Jenkins。能够被 Jenkins 远程传输文件或者执行命令。
- 因为 Jenkins 服务器位于内网,不能通过增加 Windows 节点的方式(无法连接 Jenkins)
- 所有最好能通过 SSH 方式由 Jenkins 去连接服务器
过程
- 前提条件,需要
PowerShell
- 下载 OpenSSH: https://github.com/PowerShell/Win32-OpenSSH/releases
下载 64 位系统版本 - 安装 OpenSSH
将下载好的压缩包,解压到目录:C:\Program Files
进入 OpenSSH 目录、用 powershell 运行install-sshd.ps1
安装 OpenSSH 服务
启动 OpenSSH 服务后即可通过 SSH 用密码进行连接 - 修改默认 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
- 配置免密登陆
注意:服务端的配置文件在C:\ProgramData\ssh
目录中
编辑配置文件sshd_config
1 | # 取消以下两行注释 |
在用户家目录下创建 .ssh 目录 C:\Users\Administrator\.ssh
新建 authorized_keys
文件、用于保存客户端公钥 id_rsa.pub
内容,注意末尾不要有换行符
最后重启 OpenSSH 服务即可在对应客户端免密登陆
错误处理
- 在Powershell直接脚本时会出现:
无法加载文件 ******.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"
解决办法:powershell 界面执行set-ExecutionPolicy RemoteSigned