Windows 版 OpenSSH 服务端配置免密登录

教程 · 2022-02-09

Windows 版 OpenSSH 服务端如果要允许客户端免密登录,大致的配置流程与其它系统是差不多的,都可以通过将客户端的公钥写入白名单来实现,只不过 Windows 端在细节上有一些区别。

这里客户端和服务端都使用 Windows 系统,服务端在 Windows 设置中安装 OpenSSH 服务端:设置---应用---可选功能---添加功能---在搜索栏中输入“OpenSSH”---勾选“OpenSSH 服务器”---安装

Snipaste_2022-02-09_17-37-03.png

安装完成后,使用 Powershell 配置服务自动启动

Set-Service -Name sshd -StartupType 'Automatic'

现在我们对客户端进行操作,首先使用 Powershell 执行命令

ssh-keygen

一路回车直至生成密钥对(下图来自网络,侵删)

aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy82MjE3NzYwLTQ1ZjY3ZmExNGY0ZTMyMGU.png

之后按下键盘上的 Win + R 快捷键,在运行窗口中输入 %userprofile%.ssh 打开存放密钥对的目录,将“id_rsa.pub”这个文件发送到服务端上。注意不要发错文件,pub代表公钥的意思,另一个没有“pub”后缀的文件中包含了公钥和私钥。
可以通过WinSCP、局域网文件共享、向日葵/ToDesk 等方式来发送文件、
公钥发送到服务端后,就要将其写入白名单文件中。关于这部分内容,微软官网的文档是这么描述的:

AuthorizedKeysFile
默认值为“.ssh/authorized_keys .ssh/authorized_keys2”。
如果路径不是绝对路径,则它相对于用户的主目录(或配置文件图像路径)。 示例: c:/users/user。
请注意,如果用户属于管理员组,则改为使用 %programdata%/ssh/administrators_authorized_keys。

假设要登录的用户的主目录路径为:C:/users/user
白名单文件的路径取决于这个用户是否具有管理员权限:
如果有:那路径就是“%programdata%/ssh/administrators_authorized_keys”
如果没有,那路径就是“%userprofile%/.ssh/authroized_keys”
这里我假设要登录的用户具有管理员权限。
在服务端 PC 中打开“%programdata%/ssh”目录,并将前面接收的“id_rsa.pub”文件放到这个目录里。之后按下键盘上的 Win + X 键,选择“Windows PowerShell(管理员)”,在 Powershell 窗口中定位到“id_rsa.pub”文件所在的目录之后,执行以下命令:

cat .\id_rsa.pub >> administrators_authorized_keys
Restart-Service sshd

至此服务端就配置完了,可以使用客户端进行连接并免密登录:

ssh 用户名@主机地址

附加:使用 VSCode 连接 SSH 服务端
启动 VSCode 之后,在侧边栏中点击“扩展”,安装“Remote-SSH”和“Remote - SSH: Editing Configuration Files”这两个扩展。安装完成后,VSCode 左下角会出现一个远程连接的按钮,点击它,并选择“Connect to Host”,然后选择“Add New SSH Host...”

Snipaste_2022-02-09_19-00-50.png

Snipaste_2022-02-09_19-01-13.png

之后输入 SSH 连接命令

ssh 用户名@主机地址

按下回车键,右下方会提示添加成功,之后点击“Connect”按钮尝试连接。
后续连接时,点击 VSCode 左下角的远程连接按钮,选择“Connect to Host”,然后直接选择之前添加的主机地址就可以了。

Windows 运维
  1. - 2022-06-16

    不愧是你!

Theme Jasmine by Kent Liao 粤ICP备2021153836号