银河麒麟V10离线升级OpenSSH到10.0p1-源码包方式

本次基于以下操作系统进行升级OpenSSH:

#操作系统信息
[root@host1 ~]# cat /etc/os-release 
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"

#ARM架构信息
[root@host1 ~]# uname -a
Linux host1.novalocal 4.19.90-23.48.v2101.ky10.aarch64 #1 SMP Tue Jun 4 18:45:32 CST 2024 aarch64 aarch64 aarch64 GNU/Linux

#现有的openssh版本信息
[root@host1 ~]# sshd -V
OpenSSH_8.2p1, OpenSSL 1.1.1f  31 Mar 2020

1.下载openssh、openssl、zlib源码包

openssh下载链接:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz​​​​​ 

openssl下载链接:https://www.openssl.org/source/openssl-3.3.1.tar.gz

zlib下载链接:https://www.zlib.net/zlib-1.3.1.tar.gz

2.在/root下执行 mkdir openssh 命令创建目录openssh,并将包上传到该路径,然后执行脚本安装即可

#在/root下执行 mkdir openssh 命令创建目录openssh
[root@host1 ~]# mkdir openssh

#cd切换目录,并将下载好的包上传到此目录
[root@host1 ~]# cd openssh

#最终文件信息内容如下
[root@host1 ~]# ls
install.sh  openssh-10.0p1.tar.gz  openssl-3.3.1.tar.gz  zlib-1.3.1.tar.gz

#执行脚本进行安装,注意以root身份运行脚本
[root@host1 ~]# bash install.sh

脚本install.sh内容如下:

#!/bin/bash

#定义函数,主要检查用来检查上次命令是否执行成功,不成功则退出脚本
checkconfigure(){
     if [ "$?" != "0" ]
     then
          echo -e "\e[31m 安装错误,请检查,程序退出! \e[0m"
          exit 6
     fi
}

echo -e "\033[32m程序开始执行!\033[0m"
#解压
tar -zxf openssh-10.0p1.tar.gz
tar -zxf openssl-3.3.1.tar.gz
tar -zxf zlib-1.3.1.tar.gz

#安装zlib
cd zlib-1.3.1/
#检查配置并设置安装路径
./configure --prefix=/usr/local/zlib
checkconfigure
#编译安装
make && make install
checkconfigure

#安装openssl
cd ../openssl-3.3.1/
#检查配置并设置安装路径
./Configure --prefix=/usr/local/openssl
checkconfigure
#表示使用4个核心来加速编译过程
make -j 4 && make install
checkconfigure
#x86架构用如下的lib,作为参考,该脚本同样适用于x86架构
#echo "/usr/local/openssl/lib64" >> /etc/ld.so.conf
#arm架构用如下的lib,即让系统能够找到并加载 OpenSSL 库
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
# 应用库配置
ldconfig
ldconfig -p | grep ssl
#添加到系统的 PATH 环境变量中,使其对所有用户生效
echo "export PATH=/usr/local/openssl/bin:$PATH" >> /etc/profile
#更新环境变量
source /etc/profile
checkconfigure

#安装openssh
#备份
mv /etc/ssh /etc/ssh_bak
mv /usr/bin/ssh /usr/bin/ssh_bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen_bak
mv /usr/sbin/sshd /usr/sbin/sshd_bak
cp -a /etc/pam.d/sshd /etc/pam.d/sshd_bak

cd ../openssh-10.0p1/
#检查配置并设置安装路径
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib
checkconfigure
#编译安装
make && make install
checkconfigure

#更新系统服务和配置文件
cp -a /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp -a /usr/local/openssh/bin/ssh /usr/bin/ssh
cp -a /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
#注意以下路径
cp -a /root/openssh/openssh-10.0p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd

#配置文件允许root远程,允许密码认证,允许公钥认证,执行前,请确认sshd_config路径
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

#SSH服务注册为系统服务,使得可以使用systemctl管理源码包
cat > /etc/systemd/system/sshd.service << 'EOF'
[Unit]
Description=OpenSSH Server
After=network.target

[Service]
ExecStart=/usr/local/openssh/sbin/sshd -f /etc/ssh/sshd_config
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

chmod +x /etc/systemd/system/sshd.service
#重新加载 systemd 配置
systemctl daemon-reload
# 设置开机自启
systemctl enable sshd
# 立即重启服务
systemctl restart sshd

echo -e "\033[32m更新后版本如下:\033[0m"
sshd -V

更新完成后,版本信息如下:

[root@host1 ~]# sshd -V
OpenSSH_10.0p2, OpenSSL 3.3.1 4 Jun 2024

注意事项:

以下组件不建议删除,因为源码包编译安装的方式依赖于旧的组件(尤其是openssh-server),保留旧的组件不会影响最终的漏洞修复结果。如果删除了,会导致ssh服务不可用。

[root@host1 ~]# rpm -qa | grep ssh
openssh-server-8.2p1-9.p19.ky10.aarch64
libssh2-1.9.0-8.ky10.aarch64
openssh-clients-8.2p1-9.p19.ky10.aarch64
libssh2-help-1.9.0-8.ky10.noarch
openssh-8.2p1-9.p19.ky10.aarch64
libssh-0.8.3-7.ky10.aarch64
React Hooks 是 React 16.8 中新增的特性,它可以让你在函数组件中使用 state、生命周期钩子等 React 特性。使用 Hooks 可以让你写出更简洁、可复用且易于测试的代码。 React Hooks 提供了一系列的 Hook 函数,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useImperativeHandle、useLayoutEffect 和 useDebugValue。每个 Hook 都有特定的用途,可以帮助你处理不同的问题。 下面是 React Hooks 的一些常用 Hook 函数: 1. useState useState 是最常用的 Hook 之一,它可以让你在函数组件中使用 state。useState 接受一个初始状态值,并返回一个数组,数组的第一个值是当前 state 值,第二个值是更新 state 值的函数。 ``` const [count, setCount] = useState(0); ``` 2. useEffect useEffect 可以让你在组件渲染后执行一些副作用操作,比如订阅事件、异步请求数据等。useEffect 接受两个参数,第一个参数是一个回调函数,第二个参数是一个数组,用于控制 useEffect 的执行时机。 ``` useEffect(() => { // 这里可以执行副作用操作 }, [dependencies]); ``` 3. useContext useContext 可以让你在组件树中获取 context 的值。它接受一个 context 对象,并返回该 context 的当前值。 ``` const value = useContext(MyContext); ``` 4. useRef useRef 可以让你在组件之间共享一个可变的引用。它返回一个对象,该对象的 current 属性可以存储任何值,并在组件的生命周期中保持不变。 ``` const ref = useRef(initialValue); ref.current = value; ``` 5. useCallback useCallback 可以让你缓存一个函数,以避免在每次渲染时都创建一个新的函数实例。它接受一个回调函数和一个依赖数组,并返回一个 memoized 的回调函数。 ``` const memoizedCallback = useCallback(() => { // 这里是回调函数的逻辑 }, [dependencies]); ``` 6. useMemo useMemo 可以让你缓存一个计算结果,以避免在每次渲染时都重新计算。它接受一个计算函数和一个依赖数组,并返回一个 memoized 的计算结果。 ``` const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); ``` 以上就是 React Hooks 的一些常用 Hook 函数,它们可以帮助你更好地处理组件状态、副作用、上下文和性能优化等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值