ubuntu,centos升级openssh
一、ubuntu
一、默认情况下,linux操作系统我们都是通过ssh进行远程操作,开启telnet一般是在升级ssh的时候需要,开启telnet是为了防止升级ssh之后,无法通过ssh登录系统,可用telnet登录。
安装telnet
apt-get install telnetd xinetd telnet客户端
telnetd服务端
xtelnet守护进程
配置 xinetd:编辑/etc/xinetd.d/telnet文件,确保有类似以下配置:
service telnet
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
per_source = 11
}确保
disable = no。
启动并启用 xinetd
sudo systemctl start xinetd
sudo systemctl enable xinetd由于openssh依赖openssl,所以需要安装新版openssl,从OpenSSH9.4p1开始要求openssl>=1.1.1版本
先不要下载3的版本, 有问题,可以下载1.1.1w
https://www.openssh.com/releasenotes.html #查看ssh发行版说明
https://openssl-library.org/source/old/1.1.1/index.html #下载openssl版本
tar -xzvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
mkdir -p /usr/openssh/openssl1.1.1w
./config --prefix=/usr/openssh/openssl1.1.1w
make
make install
编辑/etc/profile配置文件(vi /etc/profile),设置环境变量,在profile文件最后添加如下两行:
export LD_LIBRARY_PATH=/usr/openssh/openssl1.1.1w/lib:$LD_LIBRARY_PATH
export PATH=/usr/openssh/openssh-9.8p1/bin:/usr/openssh/openssh-9.8p1/sbin:/usr/openssh/openssl1.1.1w/bin:$PATH
openssl version安装依赖
apt install build-essential zlib1g-dev libssl-dev libevent-dev libpam0g-dev libkrb5-dev libedit-dev -y
# build-essential:安装一组编译工具,包括 GCC 编译器、make 工具等,支持从源码编译软件。
apt clean #清理缓存
apt-get download --download-only build-essential zlib1g-dev libssl-dev libevent-dev libpam0g-dev libkrb5-dev libedit-dev #只下载不安装相关依赖包
sudo apt-get --download-only -o Dir::Cache="/download/path/" \ -o Dir::Cache::archives="./" install <PACKAGE_TO_BE_INSTALLED>
下载的包在/var/cache/apt/archives
dpkg -i *.deb
下载二进制包
# 下载OpenSSH二进制包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz #阿里云镜像站
tar -zxvf openssh-9.9p1.tar.gz
cd openssh-9.9p1
# 编译安装
./configure --prefix=/usr/local/openssh-9.9p1 --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-privsep-path=/var/lib/sshd
make
make install
make install运行完后执行echo $? 命令(判断上一个命令的执行结果)显示 0 代表编译执行成功。配置选项说明:
configure 脚本支持多种选项,常用的有:
--prefix=/usr/local/ssh:指定安装目录(默认是 /usr/local)。
--sysconfdir=/etc/ssh:指定配置文件目录(默认是 /usr/local/etc/ssh)。
--with-md5-passwords:启用 MD5 密码支持。
--with-privsep-path=/var/lib/sshd:指定特权分离目录。
替换旧版本OpenSSH
备份旧的OpenSSH配置文件和密钥。
mkdir /usr/bin/ssh-bak
cp -arpf /usr/bin/scp /usr/bin/ssh-bak/scp.bak
cp -arpf /usr/bin/sftp /usr/bin/ssh-bak/sftp.bak
cp -arpf /usr/bin/ssh /usr/bin/ssh-bak/ssh.bak
cp -arpf /usr/bin/ssh-add /usr/bin/ssh-bak/ssh-add.bak
cp -arpf /usr/bin/ssh-agent /usr/bin/ssh-bak/ssh-agent.bak
cp -arpf /usr/bin/ssh-keygen /usr/bin/ssh-bak/ssh-keygen.bak
cp -arpf /usr/bin/ssh-keyscan /usr/bin/ssh-bak/ssh-keyscan.bak
mkdir /usr/sbin/ssh-bak
cp -arpf /usr/sbin/sshd /usr/sbin/ssh-bak/sshd.bak参数和命令解释
cp:复制命令,用于将文件或目录从一个位置复制到另一个位置。
-a:--archive 选项,表示归档模式,复制文件及其所有属性(如权限、时间戳和符号链接),并递归地复制目录结构。
-r:--recursive 选项,递归复制目录(对于单个文件这里不是必须的,但常常与 -a 一起使用)。
-p:--preserve 选项,保留文件的权限、所有权和时间戳等属性(此选项已被 -a 包含,但可额外加上以确保属性不被忽略)。
-f:--force 选项,如果目标文件已存在则强制覆盖。
替换新版本ssh
cp -arpf /usr/local/openssh-9.9p1/bin/* /usr/bin/
cp -arpf /usr/local/openssh-9.9p1/sbin/* /usr/sbin/修改配置文件
vi /etc/ssh/sshd_config
PermitRootLogin yes #允许root密码登录重启SSH服务以应用更改。
systemctl daemon-reload
sudo systemctl restart ssh验证OpenSSH版本是否已升级至最新版本。
ssh -V成功
回退版本
只需将上面的bak复制回去即可
cp -arpf /usr/bin/ssh-bak/scp.bak /usr/bin/scp
cp -arpf /usr/bin/ssh-bak/sftp.bak /usr/bin/sftp
cp -arpf /usr/bin/ssh-bak/ssh.bak /usr/bin/ssh
cp -arpf /usr/bin/ssh-bak/ssh-add.bak /usr/bin/ssh-add
cp -arpf /usr/bin/ssh-bak/ssh-agent.bak /usr/bin/ssh-agent
cp -arpf /usr/bin/ssh-bak/ssh-keygen.bak /usr/bin/ssh-keygen
cp -arpf /usr/bin/ssh-bak/ssh-keyscan.bak /usr/bin/ssh-keyscan
cp -arpf /usr/sbin/ssh-bak/sshd.bak /usr/sbin/sshd
systemctl daemon-reload
systemctl restart ssh升级完成请关掉telnet服务
sudo systemctl stop telnet
sudo systemctl disable telnet
sudo systemctl stop xinetd
sudo systemctl disable xinetd二、centos
一、默认情况下,linux操作系统我们都是通过ssh进行远程操作,开启telnet一般是在升级ssh的时候需要,开启telnet是为了防止升级ssh之后,无法通过ssh登录系统,可用telnet登录。
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久
setenforce 0 # 临时 1.在centos7中telnet客户端是默认安装了的,但是telnet-server与xinetd是没有安装的。需要我们去自己安装。
yum install telnet-server xinetd2.由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd 。
xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。telnet服务就是通过xinetd服务来管理的,所以在安装telnet服务之前需要先安装xinetd服务。
3.开启服务
systemctl start telnet.socket xinetd #启动服务
systemctl enable xinetd telnet.socket #命令将telnet服务设置为开机自动启动4.检查23端口是否存在

5.此时还无法使用root登录,会提示登录错误。因为默认root无法远程访问。还需要修改/etc/securetty文件。
普通用户登录可以不添加以下内容,进入服务器在提权。
在末尾添加以下内容:
cp /etc/securetty /etc/securetty.bak #先备份
vi /etc/securetty #追加以下内容
pts/0
pts/16.测试验证

成功登录
由于当前版本有漏洞风险,需要升级到openssh-8.6p1
ssh -V #查看当前版本

二、安装openssh编译时需要的依赖
yum clean #清理缓存
yum install gcc zlib-devel openssl-devel pam-devel libselinux-devel -y #在线安装依赖
yum install --downloadonly --downloaddir=/openssh-yilai/ gcc zlib-devel openssl-devel pam-devel libselinux-devel #离线下载相关rpm依赖不安装
rpm -ivh *.rpm7.关闭当前ssh服务(要确保telnet能够登录并操作才停止次服务哈)**
systemctl stop sshd8.备份ssh(非常重要,请严格执行)
mv /etc/ssh /etc/ssh.bak
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak9.编译译安装
cd /opt
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz
cd /opt && tar -zxvf openssh-8.6p1.tar.gz
chown root:root /opt/openssh-8.6p1 -R
cd /opt/openssh-8.6p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening
make && make install10.如下表示编译成功

11.授权
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key12.复制配置文件并设置允许root用户远程登录
cd /opt/openssh-8.6p1
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod u+x /etc/init.d/sshd13.修改ssh配置
vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
UseDNS no14.设置开机自启
chkconfig --add sshd
chkconfig sshd on15.重启ssh服务
systemctl daemon-reload
systemctl restart sshd16.验证
[root@k8s-master opt]# ssh -V
OpenSSH_8.6p1, OpenSSL 1.0.2k-fips 26 Jan 2017
17.成功后就可关闭telnet服务
systemctl stop xinetd.service与systemctl stop telnet.socket
systemctl disable xinetd.service与systemctl disable telnet.socket版本回退
[root@k8s-master ~]# ssh -V
OpenSSH_8.6p1, OpenSSL 1.0.2k-fips 26 Jan 201719.回滚操作:
rm -rf /etc/ssh
mv /etc/ssh.bak /etc/ssh
mv /usr/bin/ssh.bak /usr/bin/ssh
mv /usr/sbin/sshd.bak /usr/sbin/sshd
systemctl restart sshd报错:

处理
chmod 0600 /etc/ssh/ssh_host_ed25519_key
20.回滚后:
[root@localhost etc]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017