编译升级最新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

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja