编译升级最新OpenSSH_8.4p1, 替换sshd.service,解决启动卡死的问题

本文主要是介绍编译升级最新OpenSSH_8.4p1, 替换sshd.service,解决启动卡死的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 安装openssl, zlib
    我是用的openssl版本为OpenSSL 1.0.2k-fips 26 Jan 2017

  2. 下载openssh最新包
    wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.4p1.tar.gz

  3. 解压之后进入目录
    tar -zxf openssh-8.4p1.tar.gz
    cd openssh-8.4p1

  4. 编译安装到/usr/local/openssh,方便打包使用
    ./configure --prefix=/usr/local/openssh
    make -j4 & make install

  5. 修改sshd.service 和sshd-keygen.service文件
    文件路径: /usr/lib/systemd/system/sshd.service
    ExecStart=/usr/sbin/sshd -D $OPTIONS
    修改为:
    ExecStart=/usr/local/openssh/sbin/sshd -D $OPTIONS
    同理
    文件路径: /usr/lib/systemd/system/sshd-keygen.service
    ExecStart=/usr/sbin/sshd-keygen
    修改为:
    ExecStart=/usr/local/openssh/bin/sshd-keygen

  6. 注释掉/etc/ssh/sshd_config文件中的三个配置(如果有的话)

    GSSAPIAuthentication yes
    GSSAPICleanupCredentials no
    UsePAM yes
    
  7. 修改密钥权限
    chown -R 600 /etc/ssh/*key

  8. 修改ssh执行文件,使ssh -V命令可以返回最新的版本号

    mv /usr/bin/ssh /usr/bin/ssh.bak
    cp /usr/local/openssh/bin/ssh /usr/local/sbin/
    mv /usr/bin/ssh /usr/bin/ssh.bak
    cp /usr/local/openssh/bin/ssh  /usr/bin/
    
  9. 重启服务

    systemctl daemon-reload
    service sshd restart
    
  10. 效果
    OpenSSH_8.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

  11. 到这一步,查看sshd 服务状态,会发现启动sshd卡住,但是sshd 能正常使用。参考解决:

    http://blog.chinaunix.net/uid-28813320-id-5786956.html

以下拷贝自该文章:

检查后台日志会发现下面两行:
– Unit ssh.service has begun shutting down. Jul 02 18:20:04 localhost sshd[31018]: Received signal 15; terminating. Jul 02 18:20:04
localhost systemd[1]: Stopped OpenBSD Secure Shell server.
然而,你去查看进程,却发现进程已经启动,并且已经监听22端口,且能正常连接;

解释: 出现命令挂起的原因就是
sshd在启动完成后,没有给systemd发消息,systemd就一直在那傻等,所以下面我们就修改源码,添加消息;

3,源码修改: 在源码openssh-7.8p1目录下,找sshd.c这个主函数文件,找到调用server_accept_loop
这个函数的行,注意这个函数的定义也在这个文件,不要找错了! 前加一行代码,效果如下:

   /* Signal systemd that we are ready to accept connections */sd_notify(0, "READY=1");/* Accept a connection and return in a forked child */server_accept_loop(&sock_in, &sock_out,&newsock, config_s);}   相应的,在源文件开头几行添加引用头文件:#include <systemd/sd-daemon.h>

4,编译,安装 由于默认的依赖中,不包含sd_notify 这个函数,所以还需要安装依赖的包 apt-get install libsystemd-dev ##Centos7使用命令,yum install systemd-devel
编译时还需要在makefile中指明,编辑文件:Makefile ,找到变量 LIBS,修改如下: LIBS=-lcrypto -ldl -lutil -lz -lcrypt -lresolv -lsystemd
下面就可以直接编译,安装 make -j4 & make install

  1. 根据以上修改源码重新编译之后,服务正常启动。

这篇关于编译升级最新OpenSSH_8.4p1, 替换sshd.service,解决启动卡死的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900659

相关文章

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语