Windows SSH

问题

测试服务器是Windows Server 2012, 测试客户端机器是Windows 10(系统自带SSH)。

尝试过 OpenSSH for windowsFreeSSHD 均有问题,前者服务无法启动,后者客户端连接乱码,最终选用 Win32-OpenSSH

实施

1. 安装SSH服务

  1. 这里 下载最新的发布版本
  2. 解压到服务器的 C:\Program Files\OpenSSH 目录。
    确认该目录的写入权限只分配给 SYSTEMAdministrator ,其他用户只有读取和执行权限。
  3. 使用管理员打开PowerShell ,跳转到刚才解压得目录,执行下面的命令:
    powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

2. 防火墙端口设置

执行,开放防火墙22端口给SSH

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

注意: New-NetFirewallRule 只在Windows Server 2012 或者更高版本上有效,如果是客户端的Windows 或者 Windows 2008 R2 或者更低的服务器版本,执行
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

3. 启动SSHD服务

执行net start sshd启动服务

启动后会自动创建 %programdata%\ssh 文件夹,包含有服务器相关的配置,修改配置后需要重启SSHD服务

4. SSH服务登录认证

客户端登录SSH服务器常用两种方式: 密码认证,公钥认证。

4.1 密码认证

客户端机器执行 ssh <username>@<host>,回车后会要求输入密码

  • username: 服务器上的用户名
  • host:服务器地址或者域名

4.2 公钥认证

  1. 客户端生成访问公钥
    客户端执行 ssh-****** -t rsa ,根据提示设置密码,过程如下图,
    完成后就会在C:\Users\Administrator/.ssh/id_rsa 看到 id_rsa.pub 就是公钥
    Windows SSH

  2. 拷贝公钥到服务器
    用记事本打开服务器的C:\Users\<服务器用户名>/.ssh/authorized_keys(如果文件和文件夹不存在,则创建),粘贴刚才客户端生成的 id_rsa.pub到文件最后。

  3. 客户端连接 ssh <服务器主机> 根据提示输入上面设置的密码,即可正常登陆。

4.2.1 额外的配置

客户端每次连接都需要输入密码,挺麻烦的,下面使用 ssh-agent 保存密码。

ssh-agen add <id_rsa文件>

问题解答

无法使用公钥认证

在使用中发现配置文件中默认的**路径有错误。

打开服务器%programdata%\ssh\sshd_config,找到如下一行

AuthorizedKeysFile .ssh/authorized_keys

修改为

AuthorizedKeysFile C:\Users\<服务器用户名>/.ssh/authorized_keys 

重启SSHD服务即可