0%

Windows下使用OpenSSH搭建ssh服务端

产品中需要用到sftp,sftp实际上就是ssh的一部分,ssh在Linux系统中是自带的,运行sshd之后就同时也支持sftp了,也是通过22端口连接。但我们的产品需要支持跨平台,需要同时支持Linux和Windows,因此需要寻找一个跨平台的ssh实现,通过寻找发现实际上在Win10 1809和Windows Server 2019开始已经内置了,使用的正是OpenSSH。

OpenSSH

OpenSSH是ssh协议的开源实现,是OpenBSD的子项目。

OpenSSH套件包含以下工具:

  • 远程操作使用ssh、scp和sftp完成。

  • 使用ssh-add、ssh-keysign、ssh-keyscan和ssh-keygen进行密钥管理。

  • 服务端由sshd、sftp服务器和ssh代理组成。

源码:https://github.com/openssh/openssh-portable

Windows安装

Windows官方将OpenSSH移植到Windows下,源码:https://github.com/PowerShell/openssh-portable,可以从上述源码构建安装,如果你使用的Win10 1809或Windows Server 2019,也可以通过Windows可选程序安装,以Window 10 1903为例:

  1. 在“应用和功能”中点击"可选功能"

1565339623842

  1. 点击"添加功能"

1565339728185

  1. 点击”OpenSSH 服务器“,然后点击“安装”,稍等片刻后就安装成功了

1565339813519

  1. 安装后程序位于:C:\Windows\System32\OpenSSH

    1565340462014

    Win10 1903使用的7.7.2.1版本。

  2. 启动服务,命令行执行如下命令

    1
    net start sshd

OpenSSH配置

配置文件

%PROGRAMDATA%\ssh\sshd_config

默认是密码认证和公钥认证都开启的,也可以修改上述文件进行控制:

1
2
PubkeyAuthentication yes
PasswordAuthentication no

密码登录

使用Windows账户密码登陆。

1
ssh user@host

公钥登陆

  1. 客户端
  • 创建密钥和公钥

    1
    ssh-keygen -t rsa -f myssh

    运行上述命令后在%USERPROFILE%\.ssh下生成myssh和myssh.pub文件,前者是密钥,后者为公钥。

  • 向ssh代理注册私钥

    1
    2
    net start ssh-agent
    ssh-add myssh
  1. 服务端
  • 创建%USERPROFILE%\.ssh\authorized_keys文件,将上述客户机myssh.pub的内容拷贝到其中,检查authorized_keys文件权修改,确保只有System, Administrators and owner可以访问

    1
    icacls %USERPROFILE%\.ssh\authorized_keys
  • 如果登陆用户属于administrators组,还需要创建%PROGRAMDATA%\ssh\administrators_authorized_keys文件,同样拷贝客户机myssh.pub的内容拷贝到其中,这个文件只能SYSTEM和Administrators组访问,可以执行:

    1
    2
    3
    icacls administrators_authorized_keys /inheritance:r
    icacls administrators_authorized_keys /grant SYSTEM:`(F`)
    icacls administrators_authorized_keys /grant BUILTIN\Administrators:`(F`)
  • 重启sshd服务

    1
    2
    net stop sshd
    net start sshd
  1. 客户端登陆
1
ssh -i %USERPROFILE%\.ssh\myssh user@host

使用putty访问

putty是常用的ssh客户端工具,功能更加丰富,使用密钥登陆需要生成putty的密钥格式。

运行puttygen.exe,点击Load,载入上述客户机密钥文件%USERPROFILE%\.ssh\myssh,然后点击Save private key,假设保存为C:\myssh.ppk。

1565343059907

然后在putty中就可以用上述ppk文件进行登陆认证。

1565343247903

-------------本文结束感谢您的阅读-------------