其实这个问题看起来非常简单,似乎我们只需要以下命令即可:

yum install openssh-server openssh-clients

但是很遗憾的是,通过这种方式 总是不能安装到最新版本openssh

面对着眼前的安全报告文档,看着一个个高危漏洞,你打开了百度,甚至是谷歌,键入关键字 升级 ssh,动作是如此的熟悉,熟悉得让人心疼。

但是当我在查看别人写过的一些教程时,总是冒出一个又一个的为什么。

为什么我们不能查看官方的资料文档呢?

能,就是官方文档也写得非常乱

所以,我今天就告诉大家,如何在官方文档找到这些安装指引。

人家的官网可能会有变化,注意这篇文章的发布日期。

# 零、卸载旧版本的ssh软件包

执行以下命令删除和 openssh 相关的软件包,避免后续安装出现奇怪的问题。

rpm -e --nodeps `rpm -qa | grep openssh`

⚠️ 如果你是正在通过ssh管理一台远程设备,并且想要更新这台远程设备的ssh版本,建议临时安装一个 telnet,以免 ssh 安装失败导致无法连接至这台远程设备。(当然,如果你有信心不出错也可以不需要安装)

# 一、找到官网

其实如果你对于 ssh 这个软件不太熟悉,或者仅仅是知道日常你用来远程连接的软件叫做 ssh,你需要知道,ssh 其实只是一项通讯协议。而为了使用这项协议进行通讯,我们需要安装一些支持使用这项协议进行沟通的软件,而 openssh工具包 便是这一系列软件的集合啦。

所以,我们应该去到 openssh官网

openssh官网

# 二、安装指引在哪呢?

官网虽然是英文的,但是不要着急不要害怕,总要心静下来,一般我们找指引,就得锁定几个关键词。manualdocumentation或者是docsguidestartinstructions这样的字眼。

于是乎我点进了左侧的 manual 。可是点进去发现,它并不是一份包含安装说明的手册,他只是 openssh 整个软件包的各种工具的介绍。

manual

所以这不是我要找的

接下来,我留意到了首页左侧有个 linux 字眼。似乎首页给你提供了一些选项,您是要找哪个平台下的 openssh 工具包咧,好,那我们就索性点进去。

linux

点进去之后令人兴奋的是终于找到了几个重要的字眼了。

instruction

好了,该找到的都在这里了。

# 三、查看安装指引

安装指引页面是一个白底黑字的页面,刚打开就是扑面而来的劝退感。没事,别急。仔细看。

安装指引

这一篇内容有5个小标题:

  1. Prerequisites: 安装须知
  2. Building / Installation: 构建/安装
  3. Configuration: 配置
  4. (Optional) Send survey: (可选的)发送调查报告
  5. Problems?:有其他的问题吗?

好,显然后两点不重要。

这篇文章的主要内容就是告诉我们如何进行编译安装。 第一个小标题主要说在安装之前要确保您的设备上拥有一个C语言的编译器,还有根据你的需要安装相应的一些依赖。

第二个小标题就是告诉你默认的安装方法就是执行以下命令:

./configure
make
make install

如果在阅读文章的你是一个其实对于 linux 不太熟悉的同学,你就会觉得很奇怪,我该去哪里执行这些个命令呢?其实一般来讲,我们得在这款软件的源代码目录下去运行上述的命令,所以现在我们的问题就变成了,去哪搞到源代码。

所以,我们得先下载 openssh 到你的电脑上。

# 四、下载 openssh

前文中我们已经找到了下载地址了。当我们点击了那个 HTTP mirrors 链接时,它会跳转到同一个页面下方,如下图所示:

下载地址列表

这里有好多下载镜像的地址,你可以理解为像是平常我们在国内下载资源有好多选项的嘛,什么高速通道一、高速通道二的。随便点击一个进去,比如说我点了第一个

我们会看到这里就是一个文件列表: 文件列表

往最底下翻找到最新的 openssh,比如我这里最新的应该是这个 openssh-8.6p1.tar.gz,就是一个压缩包。

那理所当然就是复制这个压缩包的链接。然后在你的 centos 上执行:

wget -c https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz

如果是你的话,注意替换上面的地址

接下来就是解压这个压缩包

tar -xzf openssh-8.6p1.tar.gz 

# 五、编译安装

根据前文或者说操作指引里面说的,我们解压后会得到一个文件夹,进入这个文件夹之后执行

./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-ssl-dir=/usr/local/ssl --with-md5-passwords --mandir=/usr/share/man/
make
make install

即可安装完成了。

可以通过 ssh -V 查看当前的软件包版本。

# 六、其他问题

在安装的时候大概率会碰到一些缺少依赖的问题。仔细观察错误信息,看看它提示您缺少什么依赖,您就安装什么依赖。

例如我在一台船新的centos上,执行到 ./configure时,遇到以下报错:

configure: error: *** zlib.h missing - please install first or check config.log ***

因此,我通过 yum install zlib-devel 的依赖。

你可能会问,为什么你知道要安装 zlib-devel 这个包,而不是 zlib。因为我并不是想要使用 zlib这款软件,而是需要 zlib 作为依赖。一般来说,编译的过程中可能需要一些第三方依赖,就需要安装这些第三方软件的 开发版本

那我又是怎么知道 zlib 的开发版本是 zlib-devel 呢?

  • 尝试使用 yum search zlib 查看有哪些相关的软件可以安装
  • 盲猜开发(develop)这个单词可能的后缀,例如 zlib-devzlib-devel

如果无法启动程序,可以尝试使用 sshd -t 命令来测试是否是配置文件出现了问题

# 七、说好的是升级教程呢?

嗯,其实这样编译安装一下就可以直接到最新的版本了。