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)
永久更新环境变量
-
确认安装
ls /usr/local/ssl/bin/ # 确认存在新的 openssl 可执行文件
-
更新环境变量
编辑.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
-
更新共享库缓存
sudo ldconfig
-
验证 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):
- 编辑
/etc/services
文件:
telnet 123/tcp # 自定义 Telnet 服务端口
- 编辑
/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
}
- 重启服务并测试:
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. 在联网机…...
kafka----初步安装与配置
目录标题 ⭐kafka 与 zookeeper间的关系一.集群部署二.修改配置文件三.分发安装包四.启动与关闭 kafka 与 zookeeper 相同,是以集群的形式使用 ⭐kafka 与 zookeeper间的关系 kafka 的使用 要在 zookeeper 集群配置好的基础上 使用要想启动kafka 要先启动 zookeep…...

26考研——中央处理器_异常和中断机制(5)
408答疑 文章目录 五、异常和中断机制异常和中断的基本概念异常和中断的分类异常的分类故障 (Fault)自陷 (Trap)终止 (Abort) 中断的分类可屏蔽中断不可屏蔽中断 异常和中断响应过程关中断保存断点和程序状态识别异常和中断并转到相应的处理程序 八、参考资料鲍鱼科技课件26王道…...

数据库实验报告 SQL SERVER 2008的基本操作 1
实验报告(第 1 次) 实验名称 SQL SERVER 2008的基本操作 实验时间 9月14日1-2节 一、实验内容 数据库的基本操作:包括创建、修改、附加、分离和删除数据库等。 二、源程序及主要算法说明 本次实验不涉及程序和算法。 三、测…...

Nature图形复现—两种快速绘制热图的方法
相信大家在科研过程中,会遇到热图,有时候会觉得热图理解起来比较困难,或者觉得绘制热图也比较困难。本期教程我们来深入了解热图、绘制热图。 热图是一种通过颜色深浅或色阶变化来直观展示数据分布、密度或数值大小的可视化工具。它在多个领域…...

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行
Elasticsearch v9.0 版本最近已发布,而 INFINI Console 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台,是否支持最新的 Elasticsearch v9.0 集群管理呢?本文以 INFINI Console v1.29.2 为例,从指标监控、数…...

texlive 与 Texmaker 安装
一、安装 Texmaker 1、下载Texmaker 链接地址: Texmaker (free cross-platform latex editor) 点击 FREE DOWNLOAD ,点击 Texmaker_6.0.1_Win_x64.msi ,下载即可。 2、安装Texmaker 双击如下文件 若出现如下,点击更多信息 点击仍要运行 …...

机试刷题:进制转换3
题目来源:N诺 一、题目描述 二、解题思路 过程模拟,先转换为十进制,再转换为N进制即可。 注意:转换的时候可能出现字母,注意字母的表示。 用string和char类型对数据进行存储要更方便。 #include <iostream>…...

(顺序表、单链表、双链表)==>一篇解决!(Java版)
文章目录 一、线性表二、顺序表三、单链表四、双链表 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。 线性表的特征:数据元素之间具有一种“一对一”的逻辑关系。 线性表的分类: 线…...

JPG与PDF格式转换器
该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…...
如何在 CentOS 7 虚拟机上配置静态 IP 地址并保持重启后 SSH 连接
在使用 CentOS 7 的虚拟机时,我们通常需要配置静态 IP 地址,以确保在每次虚拟机重启后能够通过 SSH 连接。本文将介绍如何在 CentOS 7 系统中配置静态 IP 地址,并确保配置在系统重启后依然生效。 步骤 1:检查虚拟机网络接口 首先…...

手搓传染病模型(SEIARW)
在传染病传播的研究中,水传播途径是一个重要的考量因素。SEAIRW 模型(易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W)综合考虑了人与人接触传播以及水传播的双重机制,为分析此类传染病提供了全面的…...

【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑
文章目录 前言安装 Python 环境VSCode 配置Python 环境NeoVim 配置 Python 环境(选看)1. Python LSP 配置2. 打开 python 语言支持 最后参考资料系列教程 Mac 从 0 到 1 保姆级配置教程目录,点击即可跳转对应文章: 【Mac 从 0 到 …...

【递归、搜索与回溯】专题一:递归(二)
📝前言说明: 本专栏主要记录本人递归,搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码…...

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

记录算法笔记(2025.5.13)二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1,null,2] …...

【Linux】简单设计libc库
📝前言: 经过之间两篇文章,【Linux】基础IO(一)和【Linux】基础IO(二)的学些,我们对文件的基础IO已经有了一定的理解。 这篇文章我们来简单设计一下libc库,来复习一下文…...

milvus+flask山寨《从零构建向量数据库》第7章case2
继续流水账完这本书,这个案例是打造文字形式的个人知识库雏形。 create_context_db: # Milvus Setup Arguments COLLECTION_NAME text_content_search DIMENSION 2048 MILVUS_HOST "localhost" MILVUS_PORT "19530"# Inference Arguments…...
岩土拉压试验机
岩土拉压试验机,专门用于检测黄土的在压缩、拉伸状态下的力学特性试验。主要由试验机主机、控制系统、控制软件三部分部分组成。 主要技术参数、配置如下: 主 要 技 术 指 标 及 参 数 最大试验力(kN) 5 试验精度等级 0.5级 …...
.Net HttpClient 使用准则
HttpClient 使用准则 System.Net.Http.HttpClient 类用于发送 HTTP 请求以及从 URI 所标识的资源接收 HTTP 响应。 HttpClient 实例是应用于该实例执行的所有请求的设置集合,每个实例使用自身的连接池,该池将其请求与其他请求隔离开来。 从 .NET Core …...

【Canda】常用命令+虚拟环境创建到选择
目录 一、conda常用命令 二、conda 环境 2.1 创建虚拟环境 2.2 conda环境切换 2.3 查看conda环境 2.4 删除某个conda环境 2.5 克隆环境 三、依赖包管理 3.1 安装命令 3.2 更新包 3.3 卸载包 3.4 查看环境中所有包 3.5 查看某个包的版本信息 3.6 搜索包 四、环境…...
Lighthouse Core Web Vitals 指标详解与优化指南
vLighthouse Core Web Vitals 指标详解与优化指南 一、Core Web Vitals 概述 Google 在 2020 年推出的 Core Web Vitals(核心网页指标)是衡量用户体验质量的关键指标集合,现已成为搜索引擎排名的重要因素。Lighthouse 作为 Google 官方的网页质量评估工具,提供了对这些指…...
Qt进阶开发:QTcpServer的详解
文章目录 一、QTcpServer 简介二、常用成员函数的使用三、信号函数的使用四、虚函数的使用五、连接多客户端-服务端示例一、QTcpServer 简介 QTcpServer 是 Qt 网络模块中的一个核心类,用于实现 基于 TCP 协议的服务端(Server),它负责监听端口、接收客户端连接请求,并通过…...
Leetcode 3544. Subtree Inversion Sum
Leetcode 3544. Subtree Inversion Sum 1. 解题思路2. 代码实现 题目链接:3544. Subtree Inversion Sum 1. 解题思路 这一题我的思路上就是一个动态规划的思路,因为原则上我们只需要遍历一下所有的状态即可,但是这样显然时间复杂度过高&am…...
物理:由基本粒子组成的个体能否提炼和重组?
个体差异源于基本粒子组合的复杂性与随机性,这一假设若成立,确实可能为生物医学带来革命性突破——但需要突破技术、理论与系统层级的多重壁垒。以下从科学逻辑与技术路径展开分析: 一、随机组合中的共性与稳定结构 1. 自然界的自组织规律 涌现性(Emergence):尽管粒子组…...
信息学奥赛一本通 1535:【例 1】数列操作
【题目链接】 ybt 1535:【例 1】数列操作 【题目考点】 1. 树状数组 【解题思路】 本题为树状数组模板题,维护区间和,进行单点修改,区间查询。 详细讲解见:洛谷 P3374 【模板】树状数组 1(树状数组解法…...

【登录认证】JWT令牌
一、概述 JWT全称:**JSON Web Token **(https://jwt.io/)定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息。组成: ①第一部分:Header(头),记录令牌类型、签名算法等。例如: (“alg”:" HS256"," type":“…...
手撕算法(定制整理版2)
最长无重复子字符串 class Solution(object):def lengthOfLongestSubstring(self, s):""":type s: str:rtype: int"""if not s:return 0max_len 0tp []for a in s:while a in tp:del tp[0]tp.append(a)if len(tp) > max_len:max_len len(…...

python3:文件与异常
本来这篇教程是打算在base python数据类型之后出的,但是计划赶不上变化,反正最后都要融会贯通,今日有时间、今天遇到了类似的问题,就今天做这一模块的整理,顺序不是重点。 参考我的上一篇博客:https://blo…...

【兽医电子处方软件】佳易王宠物医院电子处方管理系统:宠物医院诊所用什么软件?一键导入配方模板软件程序实操教程 #操作简单 #宠物医院软件下载安装
一、概述 软件试用版资源文件下载方法: 【进入头像主页第一篇文章最后 卡片按钮 可点击了解详细资料 或左上角本博客主页 右侧按钮了解具体资料信息】 本实例以 佳易王宠物医院电子处方管理系统软件 为例说明,其他版本可参考本实例。试用版软…...