当前位置: 首页 > news >正文

Ubuntu 18.04.6下OpenSSL与OpenSSH版本升级

文章目录

    • 升级背景
    • 下载必要软件包
    • 安装 zlib
      • 创建目录
      • 解压文件
      • 安装前置依赖
      • 离线安装依赖
      • 编译安装 zlib
    • 安装 OpenSSL
      • 检查当前版本
      • 创建安装目录
      • 下载并解压 OpenSSL
      • 配置与安装
      • 验证安装
      • 解决动态库依赖问题
      • 永久更新环境变量
      • 安装OpenSSL常见错误
    • 离线安装 Telnet 服务端指南
      • 1. 在联网机器上下载安装包
      • 2. 安装 xinetd和telnetd
      • 3. 检查 xinetd 服务状态
      • 4. 配置 Telnet 服务
      • 5. 重启服务并验证
      • 6. 修改默认端口(可选)
    • 备份并卸载老版本OpenSSH
      • 1. 备份SSH配置文件
      • 2. 备份SSH相关可执行文件
      • 3. 停止SSH服务
      • 4. 查询并卸载现有OpenSSH包
      • 5. 执行卸载
      • 6. 验证卸载结果
    • 升级 OpenSSH
      • 源码安装时自启动配置
        • 启动配置文件
        • 创建符号链接
        • 创建系统用户
        • 重新加载 systemd 配置
      • 更新 SSH 访问端口
        • 修改配置文件
        • 同步配置文件
        • 验证连接
        • 配置文件示例

升级背景

SSL/TLS 协议信息泄露漏洞(CVE-2016-2183)
<*来源:Karthik Bhargavan
Gaetan Leurent
链接:https://www.openssl.org/news/secadv/20160922.txt
操作系统信息Ubuntu 18.04.6
*>

cat /etc/os-release  
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionicssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.7, OpenSSL 1.0.2n  7 Dec 2017

下载必要软件包

cd /usr/local/src/
wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
wget https://www.openssl.org/source/openssl-3.2.2.tar.gz
wget https://www.zlib.net/fossils/zlib-1.3.1.tar.gz

安装 zlib

创建目录

mkdir -p /usr/local/zlib
cd /usr/local/src/

解压文件

tar -zxvf zlib-1.3.1.tar.gz 
cd zlib-1.3

安装前置依赖

对于联网机器,仅下载所需依赖包:

sudo apt-get install --download-only gcc g++ make libc6-dev -y

此命令仅下载 gcc、g++、make 和 libc6-dev 及其依赖的 .deb 包,适用于离线部署。下载目录为 /var/cache/apt/archives/

root@ubuntu-virtual-machine:/opt/gcc-offline# ls
g++_4%3a7.4.0-1ubuntu2.3_amd64.deb       libatomic1_8.4.0-1ubuntu1~18.04_amd64.deb  libcilkrts5_7.5.0-3ubuntu1~18.04_amd64.deb   libquadmath0_8.4.0-1ubuntu1~18.04_amd64.deb     make_4.1-9.1ubuntu1_amd64.deb
g++-7_7.5.0-3ubuntu1~18.04_amd64.deb     libc6_2.27-3ubuntu1.6_amd64.deb            libgcc-7-dev_7.5.0-3ubuntu1~18.04_amd64.deb  libstdc++-7-dev_7.5.0-3ubuntu1~18.04_amd64.deb  manpages-dev_4.15-1_all.deb
gcc_4%3a7.4.0-1ubuntu2.3_amd64.deb       libc6-dbg_2.27-3ubuntu1.6_amd64.deb        libitm1_8.4.0-1ubuntu1~18.04_amd64.deb       libtsan0_8.4.0-1ubuntu1~18.04_amd64.deb
gcc-7_7.5.0-3ubuntu1~18.04_amd64.deb     libc6-dev_2.27-3ubuntu1.6_amd64.deb        liblsan0_8.4.0-1ubuntu1~18.04_amd64.deb      libubsan0_7.5.0-3ubuntu1~18.04_amd64.deb
libasan4_7.5.0-3ubuntu1~18.04_amd64.deb  libc-dev-bin_2.27-3ubuntu1.6_amd64.deb     libmpx2_8.4.0-1ubuntu1~18.04_amd64.deb       linux-libc-dev_4.15.0-213.224_amd64.deb

离线安装依赖

tar -xzvf gcc-offline.tar.gz
cd gcc-offline
sudo dpkg -i *.deb

编译安装 zlib

./configure --prefix=/usr/local/zlib
root@ubuntu-virtual-machine:/opt/zlib-1.3.1# ./configure --prefix=/usr/local/zlib
Checking for gcc...
Checking for shared library support...
Building shared library libz.so.1.3.1 with gcc.
Checking for size_t... Yes.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for strerror... Yes.
Checking for unistd.h... Yes.
Checking for stdarg.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes.
make && make install
 root@ubuntu-virtual-machine:/opt/zlib-1.3.1# make && make installgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o example.o test/example.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o adler32.o adler32.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o crc32.o crc32.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o deflate.o deflate.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o infback.o infback.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o inffast.o inffast.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o inflate.o inflate.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o inftrees.o inftrees.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o trees.o trees.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o zutil.o zutil.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o compress.o compress.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o uncompr.o uncompr.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o gzclose.o gzclose.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o gzlib.o gzlib.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o gzread.o gzread.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -c -o gzwrite.o gzwrite.car rc libz.a adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -o example example.o -L. libz.agcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -c -o minigzip.o test/minigzip.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -o minigzip minigzip.o -L. libz.agcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/adler32.o adler32.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/crc32.o crc32.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/deflate.o deflate.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/infback.o infback.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/inffast.o inffast.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/inflate.o inflate.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/inftrees.o inftrees.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/trees.o trees.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/zutil.o zutil.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/compress.o compress.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/uncompr.o uncompr.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/gzclose.o gzclose.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/gzlib.o gzlib.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/gzread.o gzread.cgcc -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -DPIC -c -o objs/gzwrite.o gzwrite.cgcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o libz.so.1.3.1 adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo  -lc rm -f libz.so libz.so.1ln -s libz.so.1.3.1 libz.soln -s libz.so.1.3.1 libz.so.1gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o examplesh example.o  -L. libz.so.1.3.1gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o minigzipsh minigzip.o  -L. libz.so.1.3.1gcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -D_FILE_OFFSET_BITS=64 -c -o example64.o test/example.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -o example64 example64.o -L. libz.agcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -I. -D_FILE_OFFSET_BITS=64 -c -o minigzip64.o test/minigzip.cgcc -O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN  -o minigzip64 minigzip64.o -L. libz.arm -f /usr/local/zlib/lib/libz.acp libz.a /usr/local/zlib/libchmod 644 /usr/local/zlib/lib/libz.acp libz.so.1.3.1 /usr/local/zlib/libchmod 755 /usr/local/zlib/lib/libz.so.1.3.1rm -f /usr/local/zlib/share/man/man3/zlib.3cp zlib.3 /usr/local/zlib/share/man/man3chmod 644 /usr/local/zlib/share/man/man3/zlib.3rm -f /usr/local/zlib/lib/pkgconfig/zlib.pccp zlib.pc /usr/local/zlib/lib/pkgconfigchmod 644 /usr/local/zlib/lib/pkgconfig/zlib.pcrm -f /usr/local/zlib/include/zlib.h /usr/local/zlib/include/zconf.hcp zlib.h zconf.h /usr/local/zlib/includechmod 644 /usr/local/zlib/include/zlib.h /usr/local/zlib/include/zconf.h

安装 OpenSSL

检查当前版本

openssl version
# 输出:OpenSSL 1.1.1  11 Sep 2018

创建安装目录

mkdir -p /usr/local/ssl

下载并解压 OpenSSL

cd /usr/local/src
tar zxvf openssl-3.2.2.tar.gz
cd openssl-3.2.2

配置与安装

./config --prefix=/usr/local/ssl --shared
make && make install
# 安装过程约需 30 分钟

验证安装

openssl version
# 发现版本未更新

解决动态库依赖问题

/usr/local/ssl/bin/openssl version
# 报错:./openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory# 解决方法:
echo '/usr/local/ssl/lib64' >> /etc/ld.so.conf
ldconfig# 再次验证
/usr/local/ssl/bin/openssl version
# 输出:OpenSSL 3.2.2 4 Jun 2024 (Library: OpenSSL 3.2.2 4 Jun 2024)

永久更新环境变量

  1. 确认安装

    ls /usr/local/ssl/bin/
    # 确认存在新的 openssl 可执行文件
    
  2. 更新环境变量
    编辑 .bashrc.bash_profile 文件:

    nano ~/.bashrc
    

    在文件末尾添加:

    export PATH=/usr/local/ssl/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/ssl/lib:$LD_LIBRARY_PATH
    

    保存并应用更改:

    source ~/.bashrc
    
  3. 更新共享库缓存

    sudo ldconfig
    
  4. 验证 OpenSSL 版本

    openssl version
    # 输出:OpenSSL 3.2.2 4 Jun 2024 (Library: OpenSSL 3.2.2 4 Jun 2024)
    

安装OpenSSL常见错误

./config --prefix=/usr/local/ssl --shared 时,报错Setting locale failed

 root@dwork:/usr/local/src/openssl-3.2.2# ./config --prefix=/usr/local/ssl --sharedperl: warning: Setting locale failed.perl: warning: Please check that your locale settings:LANGUAGE = "”en_US:en”",LC_ALL = (unset),LANG = "”en_US.UTF-8″"are supported and installed on your system.perl: warning: Falling back to the standard locale ("C").Configuring OpenSSL version 3.2.2 for target linux-x86_64Using os-specific seed configurationCreated configdata.pmRunning configdata.pmperl: warning: Setting locale failed.perl: warning: Please check that your locale settings:LANGUAGE = "”en_US:en”",LC_ALL = (unset),LANG = "”en_US.UTF-8″"are supported and installed on your system.perl: warning: Falling back to the standard locale ("C").Created Makefile.inCreated MakefileCreated include/openssl/configuration.h*************************************************************************                                                                ******   OpenSSL has been successfully configured                     ******                                                                ******   If you encounter a problem while building, please open an    ******   issue on GitHub <https://github.com/openssl/openssl/issues>  ******   and include the output from the following command:           ******                                                                ******       perl configdata.pm --dump                                ******                                                                ******   (If you are new to OpenSSL, you might want to consult the    ******   'Troubleshooting' section in the INSTALL.md file first)      ******                                                                *************************************************************************

解决方案

# 使用编辑器打开配置文件
sudo nano ~/.bashrc# 添加以下内容
LANGUAGE="en_US:en"
LANG="en_US.UTF-8"# 使配置立即生效
source ~/.bashrc# 1. 安装 locales 工具包(如未安装)
sudo apt-get update && sudo apt-get install -y locales# 2. 生成 en_US.UTF-8 语言环境
sudo locale-gen en_US.UTF-8# 3. 验证语言环境是否生成成功
locale -a | grep en_US.UTF-8

离线安装 Telnet 服务端指南

1. 在联网机器上下载安装包

sudo apt-get install --download-only telnetd xinetd -y

2. 安装 xinetd和telnetd

dpkg -i xinetd_1%3a2.3.15.3-1_amd64.deb
dpkg -i telnetd_0.17-41_amd64.deb

3. 检查 xinetd 服务状态

systemctl status xinetd

输出示例:

● xinetd.service - LSB: Starts or stops the xinetd daemon.Loaded: loaded (/etc/init.d/xinetd; generated)Active: active (running) since Wed 2025-05-07 15:52:38 CST; 4 days agoDocs: man:systemd-sysv-generator(8)Process: 27492 ExecStop=/etc/init.d/xinetd stop (code=exited, status=0/SUCCESS)Process: 27499 ExecStart=/etc/init.d/xinetd start (code=exited, status=0/SUCCESS)Tasks: 3 (limit: 4915)CGroup: /system.slice/xinetd.service├─20505 in.telnetd: 10.252.248.10├─27527 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6└─27680 in.telnetd: 10.252.248.20

4. 配置 Telnet 服务

sudo nano /etc/xinetd.d/telnet

配置文件内容:

service telnet 
{  disable = no  socket_type = stream  protocol = tcp  wait = no  user = root  server = /usr/sbin/in.telnetd  port = 23log_on_failure += USERID  
}  

5. 重启服务并验证

sudo systemctl restart xinetd
sudo systemctl status xinetd
lsof -i :23

6. 修改默认端口(可选)

若要修改 Telnet 服务端口(例如改为 123):

  1. 编辑 /etc/services 文件:
telnet     123/tcp     # 自定义 Telnet 服务端口
  1. 编辑 /etc/xinetd.d/telnet 文件:
service telnet 
{  disable = no  socket_type = stream  protocol = tcp  wait = no  user = root  server = /usr/sbin/in.telnetd  port = 123log_on_failure += USERID  
}  
  1. 重启服务并测试:
sudo systemctl restart xinetd
telnet <服务器IP> 123

备份并卸载老版本OpenSSH

1. 备份SSH配置文件

cp -r /etc/ssh /etc/ssh.old

2. 备份SSH相关可执行文件

cp -p /usr/sbin/sshd /usr/sbin/sshd.bak
cp -p /usr/bin/ssh /usr/bin/ssh.bak
cp -p /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak

3. 停止SSH服务

systemctl status sshd
systemctl stop sshd

注意:请确保不要关闭远程连接

4. 查询并卸载现有OpenSSH包

dpkg -l | grep openssh

输出示例:

ii  openssh-client       1:7.6p1-4ubuntu0.7  amd64  secure shell (SSH) client, for secure access to remote machines
ii  openssh-server       1:7.6p1-4ubuntu0.7  amd64  secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server  1:7.6p1-4ubuntu0.7  amd64  secure shell (SSH) sftp server module, for SFTP access from remote machines

5. 执行卸载

apt purge openssh-server openssh-client openssh-sftp-server

卸载报错,提示缺少依赖包。
下载并安装缺失包:sudo apt-get install --download-only curl libcurl4 -y

6. 验证卸载结果

dpkg -l | grep openssh

升级 OpenSSH

首先,创建 OpenSSH 的安装目录:

mkdir -p /usr/local/openssh

进入 /usr/local/src 目录并下载 OpenSSH 源码包:

cd /usr/local/src
wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz

解压下载的源码包:

tar zxvf openssh-9.8p1.tar.gz

进入解压后的目录:

cd openssh-9.8p1

配置编译选项,指定安装路径、zlib 和 SSL 的路径:

./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl

成功配置后,输出如下:

root@ubuntu-virtual-machine:/opt/openssh-9.8p1# ./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/sslchecking for cc... ccchecking whether the C compiler works... yeschecking for C compiler default output file name... a.outchecking for suffix of executables... checking whether we are cross compiling... nochecking for suffix of object files... ochecking whether the compiler supports GNU C... yeschecking whether cc accepts -g... yeschecking for cc option to enable C11 features... none neededchecking if cc supports C99-style variadic macros... yeschecking build system type... x86_64-pc-linux-gnuchecking host system type... x86_64-pc-linux-gnuchecking for stdio.h... yeschecking for stdlib.h... yeschecking for string.h... yes……checking for dropbearconvert... noconfigure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating buildpkg.shconfig.status: creating opensshd.initconfig.status: creating openssh.xmlconfig.status: creating openbsd-compat/Makefileconfig.status: creating openbsd-compat/regress/Makefileconfig.status: creating survey.shconfig.status: creating config.hOpenSSH has been configured with the following options:User binaries: /usr/local/openssh/binSystem binaries: /usr/local/openssh/sbinConfiguration files: /usr/local/openssh/etcAskpass program: /usr/local/openssh/libexec/ssh-askpassManual pages: /usr/local/openssh/share/man/manXPID file: /var/runPrivilege separation chroot path: /var/emptysshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/binManpage format: docPAM support: noOSF SIA support: noKerberosV support: noSELinux support: nolibedit support: nolibldns support: noSolaris process contract support: noSolaris project support: noSolaris privilege support: noIP address in $DISPLAY hack: noTranslate v4 in v6 hack: yesBSD Auth support: noRandom number source: OpenSSL internal ONLYPrivsep sandbox style: seccomp_filterPKCS#11 support: yesU2F/FIDO support: yesHost: x86_64-pc-linux-gnuCompiler: ccCompiler flags: -g -O2 -pipe -Wno-error=format-truncation -Wall -Wextra -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-parameter -Wno-unused-result -Wimplicit-fallthrough -Wmisleading-indentation -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE  Preprocessor flags: -I/usr/local/ssl/include -I/usr/local/zlib/include  -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_GNU_SOURCE -DOPENSSL_API_COMPAT=0x10100000LLinker flags: -L/usr/local/ssl/lib64 -L/usr/local/zlib/lib  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie Libraries: -ldl -lutil  -lresolv+for channels: -lcrypto  -lz+for sshd: -lcrypt root@ubuntu-virtual-machine:/opt/openssh-9.8p1# systemctl status sshdUnit sshd.service could not be found.

执行 make && make install 命令后,系统输出如下安装信息:

/usr/bin/install -c -m 644 sshd.8.out /usr/local/openssh/share/man/man8/sshd.8
/usr/bin/install -c -m 644 sftp.1.out /usr/local/openssh/share/man/man1/sftp.1
/usr/bin/install -c -m 644 sftp-server.8.out /usr/local/openssh/share/man/man8/sftp-server.8
/usr/bin/install -c -m 644 ssh-keysign.8.out /usr/local/openssh/share/man/man8/ssh-keysign.8
/usr/bin/install -c -m 644 ssh-pkcs11-helper.8.out /usr/local/openssh/share/man/man8/ssh-pkcs11-helper.8
/usr/bin/install -c -m 644 ssh-sk-helper.8.out /usr/local/openssh/share/man/man8/ssh-sk-helper.8
/bin/mkdir -p /usr/local/openssh/etc
ssh-keygen: generating new host keys: RSA ECDSA ED25519 
/usr/local/openssh/sbin/sshd -t -f /usr/local/openssh/etc/sshd_config
Privilege separation user sshd does not exist
Makefile:396: recipe for target 'check-config' failed
make: [check-config] Error 255 (ignored)

由于 SSH 默认禁止 root 用户登录,此处我们保持默认配置不变。

接下来,将编译安装生成的新配置文件复制到系统默认路径:

mkdir -p /etc/ssh/
cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
cp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub

通过以下命令验证 SSH 版本升级是否成功:

ssh -V
OpenSSH_9.8p1, OpenSSL 3.2.2 4 Jun 2024

源码安装时自启动配置

启动配置文件

路径:/lib/systemd/system/ssh.service

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755[Install]
WantedBy=multi-user.target
Alias=sshd.service
创建符号链接
sudo ln -s /lib/systemd/system/ssh.service /etc/systemd/system/sshd.service
创建系统用户
sudo useradd -r -u 122 -g 65534 -d /run/sshd -s /usr/sbin/nologin sshd
重新加载 systemd 配置
sudo systemctl daemon-reload
sudo systemctl status ssh
sudo systemctl enable ssh
sudo journalctl -xe | grep sshd

更新 SSH 访问端口

修改配置文件

路径:/usr/local/openssh/etc/sshd_config

Port 5000
#PermitRootLogin yes
同步配置文件
cp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config
sudo systemctl daemon-reload
sudo systemctl restart ssh
验证连接
ssh -P 5000 IP
配置文件示例
root@dwork:/etc/ssh# cat /etc/ssh.old/sshd_config 
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.Port 5000
#PermitRootLogin yes
……

至此,OpenSSH 升级顺利完成。如有任何建议,欢迎指教。

相关文章:

Ubuntu 18.04.6下OpenSSL与OpenSSH版本升级

文章目录 升级背景下载必要软件包安装 zlib创建目录解压文件安装前置依赖离线安装依赖编译安装 zlib 安装 OpenSSL检查当前版本创建安装目录下载并解压 OpenSSL配置与安装验证安装解决动态库依赖问题永久更新环境变量安装OpenSSL常见错误 离线安装 Telnet 服务端指南1. 在联网机…...

BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(下)

文章目录 引言一、01矩阵1.1 题目链接&#xff1a;https://leetcode.cn/problems/01-matrix/description/1.2 题目分析&#xff1a;1.3 思路讲解&#xff1a;1.4 代码实现&#xff1a; 二、飞地的数量2.1 题目链接&#xff1a;https://leetcode.cn/problems/number-of-enclaves…...

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise论文阅读

冷扩散&#xff1a;无需噪声的任意图像变换反转 摘要 标准扩散模型通常涉及两个核心步骤&#xff1a;图像降质 &#xff08;添加高斯噪声&#xff09;和图像恢复 &#xff08;去噪操作&#xff09;。本文发现&#xff0c;扩散模型的生成能力并不强烈依赖于噪声的选择&#xf…...

c++进阶——哈希表的实现

文章目录 哈希表的实现unordered_map和unordered_set哈希的引入散列的一些基本概念将Key转成整形和哈希函数哈希冲突负载因子 开放定址法和链地址法哈希函数的选取除法散列法/除留余数法乘法散列法全域散列法(了解)其他方法&#xff08;了解&#xff09; 针对于开放定址法的哈希…...

visual studio生成动态库DLL

visual studio生成动态库DLL 创建动态库工程 注意 #include “pch.h” 要放在上面 完成后点击生成 创建一个控制台项目 设置项目附加目录为刚才创建的动态库工程Dll1&#xff1a; 配置附加库目录&#xff1a; 配置动态库的导入库&#xff08;.lib&#xff09;&#xff1a;链…...

逆强化学习IRL在医疗行为模式研究中的应用

逆强化学习(Inverse Reinforcement Learning, IRL)通过从专家行为中推断潜在奖励函数,近年来在医疗领域的患者行为模式分析中展现出重要价值。 以下是相关研究的具体分析: 1. 脓毒症治疗策略优化 研究背景:脓毒症治疗依赖复杂的临床决策,但传统强化学习需预先定义奖励…...

niushop单商户V5多门店版V5.5.0全插件+商品称重、商家手机端+搭建环境教程

一.系统介绍 【全开源】niushop单商户V5多门店版V5.5.0版本&#xff0c;我看很多人都想要 商品称重、商家手机端等插件这套是全插件版本&#xff0c;整合起来本博主也花了不少啦~ Niushop系统是应用thinkphp6开发的完善的电商系统&#xff0c;拥有完善的商品机制&#xff0c;…...

Kafka Go客户端--Sarama

Kafka Go客户端 在Go中里面有三个比较有名气的Go客户端。 Sarama:用户数量最多&#xff0c;早期这个项目是在Shopify下面&#xff0c;现在挪到了IBM下。segmentio/kafka-go:没啥大的缺点。confluent-kafka-go&#xff1a;需要启用cgo,跨平台问题比较多&#xff0c;交叉编译也…...

Python打卡 DAY 24

知识点回顾&#xff1a; 1. 元组 2. 可迭代对象 3. os模块 作业&#xff1a;对自己电脑的不同文件夹利用今天学到的知识操作下&#xff0c;理解下os路径。 OS 模块 import os # os是系统内置模块&#xff0c;无需安装 获取当前工作目录 os.getcwd() # get current working…...

为什么hadoop不用Java的序列化?

Java的序列化是一个重量级序列化框架&#xff08;Serializable&#xff09;&#xff0c;一个对象被序列化后&#xff0c;会附带很多额外的信息&#xff08;各种校验信息&#xff0c;Header&#xff0c;继承体系等&#xff09;&#xff0c;不便于在网络中高效传输。所以&#xf…...

《类和对象(下)》

引言&#xff1a; 书接上回&#xff0c;如果说类和对象&#xff08;上&#xff09;是入门阶段&#xff0c;类和对象&#xff08;中&#xff09;是中间阶段&#xff0c;那么这次的类和对象&#xff08;下&#xff09;就可以当做类和对象的补充及收尾。 一&#xff1a;再探构造…...

基于STM32、HAL库的TLV320AIC3101IRHBR音频接口芯片驱动程序设计

一、简介: TLV320AIC3101IRHBR 是 Texas Instruments 推出的高性能、低功耗音频编解码器,专为便携式和电池供电设备设计。它集成了立体声 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合…...

EDR与XDR如何选择适合您的网络安全解决方案

1. 什么是EDR&#xff1f; 端点检测与响应&#xff08;EDR&#xff09; 专注于保护端点设备&#xff08;如电脑、服务器、移动设备&#xff09;。通过在端点安装代理软件&#xff0c;EDR实时监控设备活动&#xff0c;检测威胁并快速响应。 EDR核心功能 实时监控&#xff1a;…...

Vue2 elementUI 二次封装命令式表单弹框组件

需求&#xff1a;封装一个表单弹框组件&#xff0c;弹框和表单是两个组件&#xff0c;表单以插槽的形式动态传入弹框组件中。 使用的方式如下&#xff1a; 直接上代码&#xff1a; MyDialog.vue 弹框组件 <template><el-dialog:titletitle:visible.sync"dialo…...

jenkins流水线常规配置教程!

Jenkins流水线是在工作中实现CI/CD常用的工具。以下是一些我在工作和学习中总结出来常用的一些流水线配置&#xff1a;变量需要加双引号括起来 "${main}" 一 引用无账号的凭据 使用变量方式引用&#xff0c;这种方式只适合只由密码&#xff0c;没有用户名的凭证。例…...

设计模式系列(02):设计原则(一):SRP、OCP、LSP

本文为设计模式系列第2篇,聚焦面向对象设计的三大核心原则:单一职责、开放封闭、里氏替换,系统梳理定义、实际业务场景、优缺点、最佳实践与常见误区,适合系统学习与团队协作。 目录 1. 引言2. 单一职责原则(SRP)3. 开放封闭原则(OCP)4. 里氏替换原则(LSP)5. 常见误区…...

【日常】AI 工作流

AI 工作流 名称使用场景产品形态其他ChatGPT网页LLMGemini可以生成一份深度研究的文档并保存到Google Docs网页LLM白嫖了一年会员Kimi日常网页LLMDeepSeek深度思考网页LLMGrok3Deep Research 深度搜索网页LLMQwen3网页LLM元宝可免费使用DS的深度思考&#xff08;满血DS R1版&a…...

问题及解决02-处理后的图像在坐标轴外显示

一、问题 在使用matlab的appdesigner工具来设计界面&#xff0c;可以通过点击处理按钮来处理图像&#xff0c;并将处理后的图像显示在坐标轴上&#xff0c;但是图像超出了指定的坐标轴&#xff0c;即处理后的图像在坐标轴外显示。 问题图如下图所示。 原来的坐标轴如下图所…...

Spark基础介绍

Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 起源阶段 Spark 最初是在 2009 年由加州大学伯克利分校的 AMP 实验室开发。当时&#xff0c;Hadoop 在大数据处理领域占据主导地位&#xff0c;但 MapReduce 在某些复杂计算场景下&#xff0c;如迭代计算和交互…...

Oracles数据库通过存储过程调用飞书接口推送群组消息

在Oracle数据库中,可以通过存储过程调用外部接口来实现推送消息的功能。以下是一个示例,展示如何通过存储过程调用飞书接口推送群组消息。 创建存储过程 首先,创建一个存储过程,用于调用飞书接口。该存储过程使用UTL_HTTP包来发送HTTP请求。 CREATE OR REPLACE PROCEDUR…...

ubuntu22.04编译PX4无人机仿真实践

克隆PX4源码,并且更新子模块 git clone https://github.com/PX4/PX4-Autopilot.git --recursive git submodule update --init --recursive # 强制同步所有子模块 接着安装相关依赖: bash ./PX4-Autopilot/Tools/setup/ubuntu.sh 运行以下命令进行编译: cd ~/PX4-Autop…...

MySQL基础入门:MySQL简介与环境搭建

引言 在数字化转型浪潮中&#xff0c;MySQL作为数据存储的"基石引擎"&#xff0c;支撑着从电商交易到金融风控的各类核心业务。其高并发处理能力、灵活的架构设计及跨平台兼容性&#xff0c;使其成为开发者技术栈中的"常青树"。本章节将通过历史溯源、技术…...

无人机避障——(运动规划部分)深蓝学院动力学kinodynamic A* 3D算法理论解读(附C++代码)

开源代码链接&#xff1a;GitHub - Perishell/motion-planning 效果展示&#xff1a; ROS 节点展示全局规划和轨迹生成部分&#xff1a; Kinodynamic A*代码主体&#xff1a; int KinoAstar::search(Eigen::Vector3d start_pt, Eigen::Vector3d start_vel,Eigen::Vector3d en…...

电脑声音小怎么调大 查看声音调整方法

电脑是我们工作学习经常需要用到的工具&#xff0c;同时电脑也可以播放音乐、视频、游戏等&#xff0c;享受声音的效果。但是&#xff0c;有些电脑的声音很小&#xff0c;即使把音量调到最大&#xff0c;也听不清楚&#xff0c;这让我们很苦恼。那么&#xff0c;电脑声音小怎么…...

无人机信号监测系统技术解析

一、模块技术要点 1. 天线阵列与信号接收模块 多频段自适应切换&#xff1a;采用天线阵列模块&#xff0c;根据复杂地形和不同频段自动切换合适的天线&#xff0c;提升信号接收灵敏度。 双天线测向技术&#xff1a;通过双天线的RSSI&#xff08;信号接收强度&#xff09;差值…...

Excel的详细使用指南

### **一、Excel基础操作** #### **1. 界面与基本概念** - **工作簿&#xff08;Workbook&#xff09;**&#xff1a;一个Excel文件&#xff08;扩展名.xlsx&#xff09;。 - **工作表&#xff08;Worksheet&#xff09;**&#xff1a;工作簿中的单个表格&#xff08;默认名…...

基于SSM实现的健身房系统功能实现十六

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人们健康意识的不断提升&#xff0c;健身行业也在迅速扩展。越来越多的人加入到健身行列&#xff0c;健身房的数量也在不断增加。这种趋势使得健身房的管理变得越来越复杂&#xff0c;传统的手工或部分自动化的管…...

序列化和反序列化(hadoop)

1.先将上一个博客的Student复制粘贴后面加上H 在StudentH中敲下面代码 package com.example.sei; import org.apache.hadoop.io.Writable; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; //学生类&#xff0c;姓名&#xff0c;年龄 //支…...

大模型MCP_MCP从流式SSE到流式HTTP_1.8.0支持流式HTTP交互_介绍_从应用到最优--人工智能工作笔记0245

从最开始的大模型时代,到现在MCP,大模型技术,人工智能技术迭代真的非常快 之前的大模型更像一个大脑,能帮大家出点子,然后告诉你思路,你去解决问题,但是 一直不能自己解决问题,后来出来了通用的manus智能体,声称可以解决很多问题.直接操作 一个自带的电脑,但是也有局限性,还…...

docker大镜像优化实战

在 Docker 镜像优化方面&#xff0c;有许多实战技巧可以显著减小镜像体积、提高构建效率和运行时性能。以下是一些实用的优化策略和具体操作方法&#xff1a; 1. 选择合适的基础镜像 策略 使用 Alpine 版本&#xff1a;Alpine 镜像通常只有 5-10MB&#xff0c;比 Ubuntu/Deb…...

【25软考网工】第六章(5)应用层安全协议

博客主页&#xff1a;christine-rr-CSDN博客 ​​专栏主页&#xff1a;软考中级网络工程师笔记 ​​​ 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新三十篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&#xff…...

RevIN(Reversible Instance Normalization)及其在时间序列中的应用

详细介绍 RevIN&#xff08;Reversible Instance Normalization&#xff09;及其在时间序列中的应用 1. RevIN 的定义与背景 RevIN&#xff08;可逆实例归一化&#xff09;是一种专门为时间序列预测设计的归一化方法&#xff0c;旨在处理非平稳数据&#xff08;non-stationar…...

JSON 和 cJSON 库入门教程

第一部分&#xff1a;了解 JSON (JavaScript Object Notation) 什么是 JSON&#xff1f; JSON 是一种轻量级的数据交换格式。它易于人阅读和编写&#xff0c;同时也易于机器解析和生成。 JSON 基于 JavaScript 编程语言的一个子集&#xff0c;但它是一种独立于语言的文本格式…...

Unity 2D 行走动画示例工程手动构建教程-AI变成配额前端UI-完美游戏开发流程

&#x1f3ae; Unity 2D 行走动画示例工程手动构建教程 ✅ 1. 新建 Unity 项目 打开 Unity Hub&#xff1a; 创建一个新项目&#xff0c;模板选择&#xff1a;2D Core项目名&#xff1a;WalkAnimationDemo ✅ 2. 创建文件夹结构 在 Assets/ 目录下新建以下文件夹&#xff1a…...

[Java][Leetcode middle] 45. 跳跃游戏 II

这题没做出来&#xff0c;看的答案解析 可以理解为希望采用最少得跳槽次数跳到最高级别的公司。 下标i为公司本身的职级&#xff0c;每个公司可以提供本身等级nums[i]的职级提升。 每次从这些选择中选择自己能够达到最大职级的公司跳槽。 public int jump(int[] nums) {if(nu…...

leetcode 3335. 字符串转换后的长度 I

给你一个字符串 s 和一个整数 t&#xff0c;表示要执行的 转换 次数。每次 转换 需要根据以下规则替换字符串 s 中的每个字符&#xff1a; 如果字符是 z&#xff0c;则将其替换为字符串 "ab"。否则&#xff0c;将其替换为字母表中的下一个字符。例如&#xff0c;a 替…...

Leetcode 3542. Minimum Operations to Convert All Elements to Zero

Leetcode 3542. Minimum Operations to Convert All Elements to Zero 1. 解题思路2. 代码实现 题目链接&#xff1a;3542. Minimum Operations to Convert All Elements to Zero 1. 解题思路 这一题的处理方法其实还是挺好想明白的&#xff0c;其实就是从小到大依次处理各个…...

如何使用C51的Timer0实现定时功能

在C51单片机中&#xff0c;使用定时器0&#xff08;Timer0&#xff09;实现定时功能需要以下步骤&#xff1a; 1. 定时器基础知识 时钟源&#xff1a;C51的定时器时钟来源于晶振&#xff08;如12MHz&#xff09;。机器周期&#xff1a;1个机器周期 12个时钟周期&#xff08;1…...

Day1 时间复杂度

一 概念 在 C 中&#xff0c;时间复杂度是衡量算法运行时间随输入规模增长的趋势的关键指标&#xff0c;用于评估算法的效率。它通过 大 O 表示法&#xff08;Big O Notation&#xff09; 描述&#xff0c;关注的是输入规模 n 趋近于无穷大时&#xff0c;算法时间增长的主导因…...

PostgreSQL 配置设置函数

PostgreSQL 配置设置函数 PostgreSQL 提供了一组配置设置函数&#xff08;Configuration Settings Functions&#xff09;&#xff0c;用于查询和修改数据库服务器的运行时配置参数。这些函数为数据库管理员提供了动态管理数据库配置的能力&#xff0c;无需重启数据库服务。 …...

美学心得(第二百七十六集) 罗国正

美学心得&#xff08;第二百七十六集&#xff09; 罗国正 &#xff08;2025年4月&#xff09; 3275、人类将迎来真、善、美快速发展的时期&#xff0c;人‐机合一的天人合一&#xff08;可简称为“天人机合一”&#xff09;的境界已渐露头角&#xff0c;在优秀的人群中迅猛地…...

描述性统计工具 - AxureMost 落葵网

描述性统计工具是用于汇总和分析数据&#xff0c;以更好地了解数据特征的工具1。以下是一些常见的描述性统计工具简介&#xff1a; 描述性统计工具 Excel 基本统计函数&#xff1a;提供了丰富的函数用于计算描述性统计量。例如&#xff0c;AVERAGE 函数用于计算平均值&#xf…...

mybatis中${}和#{}的区别

先测试&#xff0c;再说结论 userService.selectStudentByClssIds(10000, "wzh or 11");List<StudentEntity> selectStudentByClssIds(Param("stuId") int stuId, Param("field") String field);<select id"selectStudentByClssI…...

【OpenCV】网络模型推理的简单流程分析(readNetFromONNX、setInput和forward等)

目录 1.模型读取&#xff08;readNetFromONNX()&#xff09;1.1 初始化解析函数&#xff08;parseOperatorSet()&#xff09;1.2 提取张量&#xff08;getGraphTensors()&#xff09;1.3 节点处理&#xff08;handleNode()&#xff09; 2.数据准备&#xff08;blobFromImage() …...

代码随想录算法训练营第三十九天

LeetCode题目: 115. 不同的子序列583. 两个字符串的删除操作72. 编辑距离 其他: 今日总结 往期打卡 115. 不同的子序列 跳转: 115. 不同的子序列 学习: 代码随想录公开讲解 问题: 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数。 测试用例保…...

InternVL3: 利用AI处理文本、图像、视频、OCR和数据分析

InternVL3推动了视觉-语言理解、推理和感知的边界。 在其前身InternVL 2.5的基础上,这个新版本引入了工具使用、GUI代理操作、3D视觉和工业图像分析方面的突破性能力。 让我们来分析一下是什么让InternVL3成为游戏规则的改变者 — 以及今天你如何开始尝试使用它。 InternVL…...

力扣刷题Day 48:盛最多水的容器(283)

1.题目描述 2.思路 学习了Krahets佬的双指针思路&#xff0c;初始化两个边界作为容器边界&#xff0c;然后逐个向数组内遍历&#xff0c;直到左右两指针相遇。 3.代码&#xff08;Python3&#xff09; class Solution:def maxArea(self, height: List[int]) -> int:left,…...

基于单应性矩阵变换的图像拼接融合

单应性矩阵变换 单应性矩阵是一个 3x3 的可逆矩阵&#xff0c;它描述了两个平面之间的投影变换关系。在图像领域&#xff0c;单应性矩阵可以将一幅图像中的点映射到另一幅图像中的对应点&#xff0c;前提是这两幅图像是从不同视角拍摄的同一平面场景。 常见的应用场景&#x…...

《驱动开发硬核特训 · 专题篇》:深入理解 I2C 子系统

关键词&#xff1a;i2c_adapter、i2c_client、i2c_driver、i2c-core、platform_driver、设备树匹配、驱动模型 本文目标&#xff1a;通过实际代码一步步讲清楚 I2C 子系统的结构与运行机制&#xff0c;让你不再混淆 platform_driver 与 i2c_driver 的职责。 &#x1f9e9; 一、…...

Spark缓存-cache

一、RDD持久化 1.什么时候该使用持久化&#xff08;缓存&#xff09; 2. RDD cache & persist 缓存 3. RDD CheckPoint 检查点 4. cache & persist & checkpoint 的特点和区别 特点 区别 二、cache & persist 的持久化级别及策略选择 Spark的几种持久化…...