赞
踩
注意:如果是生产环境,建议先备份!!!
首先一台虚拟机,我这边使用的是centos7的系统,openssh版本如下
[root@docker-client ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
[root@docker-client ~]#
[root@docker-client ~]# yum -y install wget gcc openssl-devel pam-devel rpm-build zlib-devel
可以下载好上传到对应服务器,或者直接使用wget命令下载
- [root@docker-client ~]# wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1t.tar.gz
- [root@docker-client ~]# ls -l
- total 490008
- -rw-r--r-- 1 root root 491879424 Apr 2 11:01 centos7.tar
- -rw-r--r-- 1 root root 9881866 Dec 4 22:38 openssl-1.1.1t.tar.gz
- -rw-r--r-- 1 root root 56 Mar 29 15:41 test.txt
- [root@docker-client ~]#
-
- [root@docker-client ~]# tar xf openssl-1.1.1t.tar.gz
- [root@docker-client ~]# mv openssl-1.1.1t /usr/local/
- [root@docker-client local]# ls
- bin etc games include lib lib64 libexec nginx openssl openssl-1.1.1t sbin share src
- [root@docker-client local]# cd openssl-1.1.1t/
- [root@docker-client openssl-1.1.1t]# ls
- ACKNOWLEDGEMENTS config crypto FAQ libcrypto.pc libssl.so NOTES.ANDROID openssl.pc ssl
- apps config.com demos fuzz libcrypto.so libssl.so.1.1 NOTES.DJGPP os-dep test
- appveyor.yml configdata.pm doc include libcrypto.so.1.1 LICENSE NOTES.PERL pod2htmd.tmp tools
- AUTHORS Configurations engines INSTALL libssl.a Makefile NOTES.UNIX README util
- build.info Configure e_os.h libcrypto.a libssl.map ms NOTES.VMS README.ENGINE VMS
- CHANGES CONTRIBUTING external libcrypto.map libssl.pc NEWS NOTES.WIN README.FIPS wycheproof
-
./config shared --prefix=/usr/local/openssl
:
./config
:这是运行 OpenSSL 配置脚本的命令。配置脚本用于根据系统环境和需求生成适当的 Makefile 文件,以便后续的编译过程。shared
:这个参数告诉配置脚本生成一个共享库(Shared Library),也就是动态链接库,使得 OpenSSL 库可以在不同的程序之间共享。--prefix=/usr/local/openssl
:这个参数指定了安装目录,即将 OpenSSL 安装到/usr/local/openssl
目录下。通常,--prefix
参数用于指定软件的安装目录,默认情况下,软件会安装到/usr/local
目录下。
make -j 4
:
make
:这是一个用于自动构建可执行程序和库的工具,通常与 Makefile 文件一起使用。它根据 Makefile 中的规则来编译源代码,并生成最终的可执行文件或库文件。-j 4
:这个参数告诉make
工具使用 4 个并行任务(jobs)来加速编译过程。这样可以同时处理多个文件,加快整个编译过程。具体的并行任务数可以根据系统的 CPU 核心数量和可用内存来调整。
make install
:
make install
:这个命令将编译好的 OpenSSL 库文件和相关的头文件、文档等安装到指定的目录中(在上一步中通过--prefix
参数指定)。通常,这个命令会将编译好的文件复制到系统的标准位置,以便其他程序可以使用 OpenSSL 库。
- [root@docker-client openssl-1.1.1t]# ./config shared --prefix=/usr/local/openssl
-
- [root@docker-client openssl-1.1.1t]# make -j 4
-
- [root@docker-client openssl-1.1.1t]# make install
- # 将 /usr/local/openssl/lib/ 路径追加到 /etc/ld.so.conf 文件中
- [root@docker-client openssl-1.1.1t]# echo "/usr/local/openssl/lib/" >> /etc/ld.so.conf
- [root@docker-client openssl-1.1.1t]# cat /etc/ld.so.conf
- include ld.so.conf.d/*.conf
- /usr/local/openssl/lib/
-
- [root@docker-client openssl-1.1.1t]# cat /etc/ld.so.c
- ld.so.cache ld.so.conf ld.so.conf.d/
-
- # 加载配置文件
- [root@docker-client openssl-1.1.1t]# ld
- ld ldattach ld.bfd ldconfig ldd ld.gold
- [root@docker-client openssl-1.1.1t]# ldconfig
-
- # 备份之前版本的openssl
- [root@docker-client openssl-1.1.1t]# mv /usr/bin/openssl /usr/bin/openssl.old
-
- # 创建openssl软链接
- [root@docker-client openssl-1.1.1t]# ln -sv /usr/local/openssl/bin/openssl /usr/bin/openssl
- ‘/usr/bin/openssl’ -> ‘/usr/local/openssl/bin/openssl’
-
- [root@docker-client openssl-1.1.1t]# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
-
- [root@docker-client openssl-1.1.1t]# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
-
- [root@docker-client openssl-1.1.1t]# openssl version -a
- OpenSSL 1.1.1t 7 Feb 2023
- built on: Mon Apr 15 07:45:31 2024 UTC
- platform: linux-x86_64
- options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
- compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
- OPENSSLDIR: "/usr/local/openssl/ssl"
- ENGINESDIR: "/usr/local/openssl/lib/engines-1.1"
- Seeding source: os-specific
- [root@docker-client openssl-1.1.1t]#
检查之前的openssh安装包,并备份旧的openssh
- [root@docker-client openssl-1.1.1t]# rpm -qa |grep openssh
- openssh-clients-7.4p1-22.el7_9.x86_64
- openssh-7.4p1-22.el7_9.x86_64
- openssh-server-7.4p1-22.el7_9.x86_64
- [root@docker-client openssl-1.1.1t]#
-
-
- # 备份
- [root@docker-client openssl-1.1.1t]# mv /etc/ssh/ /etc/ssh.bak
- [root@docker-client openssl-1.1.1t]#
- [root@docker-client openssl-1.1.1t]# mv /usr/bin/ssh /usr/bin/ssh.bak
- [root@docker-client openssl-1.1.1t]#
- [root@docker-client openssl-1.1.1t]# mv /usr/sbin/sshd /usr/sbin/sshd.bak
- [root@docker-client openssl-1.1.1t]#
-
- # 如果是第一次升级openssh,备份/etc/init.d/sshd时会报不存在文件或者目录,如下,忽略即可
- [root@docker-client openssl-1.1.1t]# mv /etc/init.d/sshd /etc/init.d/sshd.bak
- mv: cannot stat ‘/etc/init.d/sshd’: No such file or directory
-
- # 卸载现在版本的openssh相关的包
- [root@docker-client openssl-1.1.1t]# rpm -e --nodeps $(rpm -qa |grep openssh)
- warning: file /usr/sbin/sshd: remove failed: No such file or directory
- warning: file /etc/ssh/sshd_config: remove failed: No such file or directory
- warning: file /usr/bin/ssh: remove failed: No such file or directory
- warning: file /etc/ssh/ssh_config: remove failed: No such file or directory
- warning: file /etc/ssh/moduli: remove failed: No such file or directory
- warning: file /etc/ssh: remove failed: No such file or directory
-
- # 卸载完成后在查一下是否卸载干净
- [root@docker-client openssl-1.1.1t]# rpm -qa | grep openssh
- [root@docker-client openssl-1.1.1t]#
官网下载:Index of /pub/OpenBSD/OpenSSH/portable/
可以下载好上传到对应服务器,或者直接使用wget命令下载
- [root@docker-client ~]# wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz
- --2024-04-15 16:02:55-- https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p2.tar.gz
- Resolving cdn.openbsd.org (cdn.openbsd.org)... 151.101.111.52, 2a04:4e42:8c::820
- Connecting to cdn.openbsd.org (cdn.openbsd.org)|151.101.111.52|:443... connected.
- HTTP request sent, awaiting response... 200 OK
- Length: 1835850 (1.8M) [application/octet-stream]
- Saving to: ‘openssh-9.3p2.tar.gz’
-
- 100%[==============================================================================================>] 1,835,850 106KB/s in 26s
-
- 2024-04-15 16:03:24 (67.8 KB/s) - ‘openssh-9.3p2.tar.gz’ saved [1835850/1835850]
-
- [root@docker-client ~]#
- [root@docker-client ~]# mv openssh-9.3p2.tar.gz /usr/local/
- [root@docker-client ~]#
- [root@docker-client ~]# cd /usr/local/
- [root@docker-client local]# tar xf openssh-9.3p2.tar.gz
- [root@docker-client local]# ls
- bin etc games include lib lib64 libexec nginx openssh-9.3p2 openssh-9.3p2.tar.gz openssl openssl-1.1.1t sbin share src
- [root@docker-client local]#
- [root@docker-client local]# cd openssh-9.3p2
- [root@docker-client openssh-9.3p2]# CCFLAGS="-I/usr/local/include" \
- > LDFLAGS="-L/usr/local/lib64" \
- > ./configure \
- > --sysconfdir=/etc/ssh \
- > --with-zlib \
- > --with-ssl-dir=/usr/local/openssl
-
-
- [root@docker-client openssh-9.3p2]# make -j 4
-
- [root@docker-client openssh-9.3p2]# make install
- (cd openbsd-compat && make)
- make[1]: Entering directory `/usr/local/openssh-9.3p2/openbsd-compat'
- make[1]: Nothing to be done for `all'.
- make[1]: Leaving directory `/usr/local/openssh-9.3p2/openbsd-compat'
- /usr/bin/mkdir -p /usr/local/bin
- /usr/bin/mkdir -p /usr/local/sbin
- /usr/bin/mkdir -p /usr/local/share/man/man1
- /usr/bin/mkdir -p /usr/local/share/man/man5
- /usr/bin/mkdir -p /usr/local/share/man/man8
- /usr/bin/mkdir -p /usr/local/libexec
- /usr/bin/mkdir -p -m 0755 /var/empty
- /usr/bin/install -c -m 0755 -s ssh /usr/local/bin/ssh
- /usr/bin/install -c -m 0755 -s scp /usr/local/bin/scp
- /usr/bin/install -c -m 0755 -s ssh-add /usr/local/bin/ssh-add
- /usr/bin/install -c -m 0755 -s ssh-agent /usr/local/bin/ssh-agent
- /usr/bin/install -c -m 0755 -s ssh-keygen /usr/local/bin/ssh-keygen
- /usr/bin/install -c -m 0755 -s ssh-keyscan /usr/local/bin/ssh-keyscan
- /usr/bin/install -c -m 0755 -s sshd /usr/local/sbin/sshd
- /usr/bin/install -c -m 4711 -s ssh-keysign /usr/local/libexec/ssh-keysign
- /usr/bin/install -c -m 0755 -s ssh-pkcs11-helper /usr/local/libexec/ssh-pkcs11-helper
- /usr/bin/install -c -m 0755 -s ssh-sk-helper /usr/local/libexec/ssh-sk-helper
- /usr/bin/install -c -m 0755 -s sftp /usr/local/bin/sftp
- /usr/bin/install -c -m 0755 -s sftp-server /usr/local/libexec/sftp-server
- /usr/bin/install -c -m 644 ssh.1.out /usr/local/share/man/man1/ssh.1
- /usr/bin/install -c -m 644 scp.1.out /usr/local/share/man/man1/scp.1
- /usr/bin/install -c -m 644 ssh-add.1.out /usr/local/share/man/man1/ssh-add.1
- /usr/bin/install -c -m 644 ssh-agent.1.out /usr/local/share/man/man1/ssh-agent.1
- /usr/bin/install -c -m 644 ssh-keygen.1.out /usr/local/share/man/man1/ssh-keygen.1
- /usr/bin/install -c -m 644 ssh-keyscan.1.out /usr/local/share/man/man1/ssh-keyscan.1
- /usr/bin/install -c -m 644 moduli.5.out /usr/local/share/man/man5/moduli.5
- /usr/bin/install -c -m 644 sshd_config.5.out /usr/local/share/man/man5/sshd_config.5
- /usr/bin/install -c -m 644 ssh_config.5.out /usr/local/share/man/man5/ssh_config.5
- /usr/bin/install -c -m 644 sshd.8.out /usr/local/share/man/man8/sshd.8
- /usr/bin/install -c -m 644 sftp.1.out /usr/local/share/man/man1/sftp.1
- /usr/bin/install -c -m 644 sftp-server.8.out /usr/local/share/man/man8/sftp-server.8
- /usr/bin/install -c -m 644 ssh-keysign.8.out /usr/local/share/man/man8/ssh-keysign.8
- /usr/bin/install -c -m 644 ssh-pkcs11-helper.8.out /usr/local/share/man/man8/ssh-pkcs11-helper.8
- /usr/bin/install -c -m 644 ssh-sk-helper.8.out /usr/local/share/man/man8/ssh-sk-helper.8
- /usr/bin/mkdir -p /etc/ssh
- ssh-keygen: generating new host keys: RSA ECDSA ED25519
- /usr/local/sbin/sshd -t -f /etc/ssh/sshd_config
- [root@docker-client openssh-9.3p2]#
编译命令详解:
CCFLAGS="-I/usr/local/include"
:这部分设置了编译器标志,其中-I
选项用于指定编译时包含文件的搜索路径。在这里,-I/usr/local/include
指定了编译器在搜索头文件时应该包含/usr/local/include
目录。
LDFLAGS="-L/usr/local/lib64"
:这部分设置了链接器标志,其中-L
选项用于指定链接时库文件的搜索路径。在这里,-L/usr/local/lib64
指定了链接器在搜索库文件时应该包含/usr/local/lib64
目录。
./configure
:这是运行 OpenSSH 的配置脚本的命令。配置脚本会根据系统环境和指定的参数来生成 Makefile,用于后续编译和安装。
--sysconfdir=/etc/ssh
:这个选项指定了配置文件安装的目录。在这里,/etc/ssh
是指将 OpenSSH 的配置文件安装到/etc/ssh
目录下。
--with-zlib
:这个选项用于启用对 zlib 库的支持,以便 OpenSSH 可以使用 zlib 进行压缩和解压缩操作。
--with-ssl-dir=/usr/local/openssl
:这个选项用于指定 OpenSSL 库的安装路径。在这里,/usr/local/openssl
是指 OpenSSL 库的安装目录,OpenSSH 将会使用这个目录下的 OpenSSL 库进行加密和解密操作。
- [root@docker-client openssh-9.3p2]# chmod 600 /etc/ssh/*
- [root@docker-client openssh-9.3p2]#
- [root@docker-client openssh-9.3p2]# ls -l /etc/ssh/*
- -rw------- 1 root root 573991 Apr 15 16:10 /etc/ssh/moduli
- -rw------- 1 root root 1531 Apr 15 16:10 /etc/ssh/ssh_config
- -rw------- 1 root root 3137 Apr 15 16:10 /etc/ssh/sshd_config
- -rw------- 1 root root 513 Apr 15 16:10 /etc/ssh/ssh_host_ecdsa_key
- -rw------- 1 root root 180 Apr 15 16:10 /etc/ssh/ssh_host_ecdsa_key.pub
- -rw------- 1 root root 411 Apr 15 16:10 /etc/ssh/ssh_host_ed25519_key
- -rw------- 1 root root 100 Apr 15 16:10 /etc/ssh/ssh_host_ed25519_key.pub
- -rw------- 1 root root 2610 Apr 15 16:10 /etc/ssh/ssh_host_rsa_key
- -rw------- 1 root root 572 Apr 15 16:10 /etc/ssh/ssh_host_rsa_key.pub
- [root@docker-client openssh-9.3p2]#
- [root@docker-client openssh-9.3p2]# cp -rf /usr/local/sbin/sshd /usr/sbin/sshd
- [root@docker-client openssh-9.3p2]# cp -rf /usr/local/bin/ssh /usr/bin/ssh
- [root@docker-client openssh-9.3p2]# cp -rf /usr/local/bin/ssh-keygen /usr/bin/ssh-keygen
- [root@docker-client openssh-9.3p2]# cp -ar /usr/local/openssh-9.3p2/contrib/redhat/sshd.init /etc/init.d/sshd
- [root@docker-client openssh-9.3p2]# cp -ar /usr/local/openssh-9.3p2/contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
- [root@docker-client openssh-9.3p2]#
- [root@docker-client openssh-9.3p2]# vim /etc/ssh/ssh_config
-
- 未尾行添加如下信息
- PermitRootLogin yes
- X11Forwarding yes
- PasswordAuthentication yes
- KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org
-
- [root@docker-client openssh-9.3p2]# sed -i "s/^#Port/Port/g" /etc/ssh/sshd_config
- [root@docker-client openssh-9.3p2]# chmod 755 /etc/init.d/sshd
- [root@docker-client openssh-9.3p2]#
- [root@docker-client openssh-9.3p2]#
- [root@docker-client openssh-9.3p2]# systemctl enable sshd
- sshd.service is not a native service, redirecting to /sbin/chkconfig.
- Executing /sbin/chkconfig sshd on
- [root@docker-client openssh-9.3p2]# systemctl restart sshd
- [root@docker-client openssh-9.3p2]# systemctl status sshd
- ● sshd.service - SYSV: OpenSSH server daemon
- Loaded: loaded (/etc/rc.d/init.d/sshd; bad; vendor preset: enabled)
- Active: active (running) since Mon 2024-04-15 16:14:26 CST; 9s ago
- Docs: man:systemd-sysv-generator(8)
- Process: 36517 ExecStart=/etc/rc.d/init.d/sshd start (code=exited, status=0/SUCCESS)
- Main PID: 36525 (sshd)
- Tasks: 1
- Memory: 548.0K
- CGroup: /system.slice/sshd.service
- └─36525 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
-
- Apr 15 16:14:26 docker-client systemd[1]: Starting SYSV: OpenSSH server daemon...
- Apr 15 16:14:26 docker-client systemd[1]: Can't open PID file /var/run/sshd.pid (yet?) after start: No such file or directory
- Apr 15 16:14:26 docker-client sshd[36517]: Starting sshd:[ OK ]
- Apr 15 16:14:26 docker-client sshd[36525]: Server listening on 0.0.0.0 port 22.
- Apr 15 16:14:26 docker-client sshd[36525]: Server listening on :: port 22.
- Apr 15 16:14:26 docker-client systemd[1]: Started SYSV: OpenSSH server daemon.
- [root@docker-client openssh-9.3p2]#
- [root@docker-client openssh-9.3p2]# ssh -V
- OpenSSH_9.3p2, OpenSSL 1.1.1t 7 Feb 2023
- [root@docker-client openssh-9.3p2]#
以上就是openssh7.4p1升级到openssh9.3p2的过程,希望能帮助到你!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。