步骤/目录:
1.SSH简介
2.Windows系统开启SSH

本文首发于个人博客https://lisper517.top/index.php/archives/84/,转载请注明出处。
本文的目的是在Windows系统中开启SSH。
本文实验日期为2023年5月5日,使用的电脑是家用台式机,win10系统。

1.SSH简介

以下内容来自 SSH 基本知识

SSH(Secure Shell)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。它主要用于保证远程登录和远程通信的安全,任何网络服务都可以用这个协议来加密。

历史上,网络主机之间的通信是不加密的,属于明文通信。这使得通信很不安全,一个典型的例子就是服务器登录。登录远程服务器的时候,需要将用户输入的密码传给服务器,如果这个过程是明文通信,就意味着传递过程中,线路经过的中间计算机都能看到密码。1995年,芬兰赫尔辛基工业大学的研究员 Tatu Ylönen 设计了 SSH 协议的第一个版本,同时写出了第一个实现,即SSH1。写完以后,他就把这个工具公开了,允许其他人免费使用。SSH 可以替换 rlogin、TELNET、FTP 和 rsh 这些不安全的协议,所以大受欢迎,用户快速增长,1995年底已经发展到五十个国家的20,000个用户。SSH 1 协议也变成 IETF 的标准文档。1995年12月,由于需求越来越大,Tatu Ylönen 就成立了一家公司 SCS,专门销售和开发 SSH。这个软件的后续版本,逐渐从免费软件变成了专有的商业软件。1996年又提出了 SSH 2 协议(或者称为 SSH 2.0)。这个协议与1.0版不兼容,在1997年进行了标准化,1998年推出了软件实现 SSH2。但是,官方的 SSH2 软件需要付费,而且 SSH1 的有些功能也没有提供。
1999年,OpenBSD(一个致力于提供免费、开源的类UNIX操作系统的组织) 的开发人员决定写一个 SSH 2 协议的开源实现,即 OpenSSH 项目。该项目最初是基于 SSH 1.2.12 版本,那是当时 SSH1 最后一个开源版本。但是,OpenSSH 很快就完全摆脱了原始的官方代码,在许多开发者的参与下,按照自己的路线发展。OpenSSH 随 OpenBSD 2.6 版本一起提供,以后又移植到其他操作系统,成为最流行的 SSH 实现。目前,Linux 的所有发行版几乎都自带 OpenSSH。现在,SSH-2 有多种实现,既有免费的,也有收费的,而 OpenSSH 无疑是最受欢迎的。

SSH 的软件架构是服务器-客户端模式(Server - Client)。在这个架构中,SSH 软件分成两个部分:向服务器发出请求的部分,称为客户端(client),OpenSSH 的实现为 ssh;接收客户端发出的请求的部分,称为服务器(server),OpenSSH 的实现为 sshd。另外,OpenSSH 还提供一些辅助工具软件(比如 ssh-keygen 、ssh-agent)和专门的客户端工具(比如 scp 和 sftp)。

需要提醒的是有些工具提供了便捷的SSH客户端管理,比如PuTTY,但它的ppk私钥与OpenSSH的私钥不通用,需要用它的puttygen工具转换一下。

2.Windows系统开启SSH

(1)开启sshd服务器

在 开始-设置-应用-可选功能 里,在 已安装功能 中搜索 ssh ,一般来说win10默认安装了OpenSSH客户端,但是如上文所述,想通过SSH连接到win10电脑需要的是服务器。在 添加功能 中搜索 ssh 找到OpenSSH服务器并安装,然后在 C:\Windows\System32 中找到 cmd.exe ,将之创建一个桌面快捷方式,右键管理员启动,运行 net start sshd 开启sshd服务器。一般这时候会显示:

发生系统错误 1058。

无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。

这是因为sshd服务被禁用。在开始菜单旁边的搜索栏(放大镜)中寻找 服务 ,找到 OpenSSH SSH Server 和 OpenSSH Authentication Agent ,右键 属性 ,把 启动类型 从 禁用 改为 自动 ,再次 net start sshd 即可。显示如下:

OpenSSH SSH Server 服务正在启动 .
OpenSSH SSH Server 服务已经启动成功。

如上设置完成后,sshd开机后都会自启动。

(2)用户名与密码

如果你用另一台win10电脑的cmd登录,输入如下命令:

ssh 用户名@IP地址

笔者更加推荐用PuTTY登录。但是不论用什么工具登录,有些时候可能会忘记用户名和密码。在 开始-文档 的上面有一个灰色头像图标,可以更改目前用户的一些设置,把鼠标放在上面一会儿也可以看到用户名;在 登录选项 中选择 密码 可更改密码。

(3)密钥登录

用密钥登录更加安全。可以用OpenSSH自带的生成工具做密钥,也可用PuTTY生成。在 C:\Windows\System32\OpenSSH 中可以找到 ssh-keygen.exe ,或者你可以在cmd中执行如下命令:

ssh-keygen -t rsa

选择路径与密钥名,设置密码(也可以不设置,这个密码是在每次使用公钥时用于打开公钥的,安全性更高但每次都要输入密码)。

接下来的操作和linux类似,首先打开 C:\ProgramData\ssh\sshd_config 更改为以下设置(这个文件在首次运行sshd后自动创建,需要管理员权限才能修改,推荐用vscode而非记事本打开):

PubkeyAuthentication yes #允许密钥访问
AuthorizedKeysFile    .ssh/authorized_keys #存放私钥的文件
PasswordAuthentication no #可选,禁止密码登录,提高安全性
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys #可能是administrator的私钥文件

前面有 # 注释的是默认设置,如果和上面一致就不用更改。值得注意的是最后两项不是默认设置,需要注释掉。
每个用户自己有一个文件存放授权私钥,具体来说是 C:\Users\用户名.ssh\authorized_keys ,不过这个文件需要新建。把刚才生成的 .pub 文件(公钥)改名为无后缀的 authorized_keys 放到 C:\Users\用户名.ssh 下即可,以后如果要新增公钥记录就新建一行、复制粘贴到 authorized_keys 文件中。如果用PuTTY登录,可使用puttygen打开该 .pub 文件对应的私钥,生成一个PuTTY可以用的ppk私钥,尝试连接即可。

另外需要提醒一下,在cmd中使用 ssh -i 密钥 连接到其它机器时,会提示权限问题( It is recommended that your private key files are NOT accessible by others. ),大概是说这个密钥太公开了、所有人都能访问到。此时需要对密钥 右键-属性-安全 ,删掉所有其它人的权限,只保留该密钥所有者的完全控制,才能在cmd中使用该密钥。如果是linux机器上用openssh,一般没有这个问题,有的话用chown和chmod改一下就行。

标签: none

添加新评论