我是靠谱客的博主 温柔冰棍,最近开发中收集的这篇文章主要介绍编译升级最新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,解决启动卡死的问题的全部内容,希望文章能够帮你解决编译升级最新OpenSSH_8.4p1, 替换sshd.service,解决启动卡死的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部