OpenSSH 8.0 发布了,此版本缓解了 scp(1) 工具和协议漏洞 CVE-2019-6111,该漏洞此前我们之前报导过:知名文件传输协议 SCP 被曝存在 35 年历史的安全漏洞。将文件从远程系统复制到本地目录时,SCP 客户端无法验证 SCP 服务器返回的对象是否与请求的东西一致,这使得攻击者可以使用恶意服务器控制的内容创建或破坏本地文件。
OpenSSH 8.0 的缓解措施添加了客户端检查,查看从服务器发送的文件名与命令行请求是否匹配。
SCP 协议已经过时,不灵活且不易修复,OpenSSH 官方建议使用更现代的协议进行文件传输,如 sftp 和 rsync。
此版本新特性包括:
ssh(1)、ssh-agent(1)、ssh-add(1):PKCS#11 token 中添加对 ECDSA 密钥的支持。
ssh(1)、sshd(8):基于 Streamlined NTRU Prime 4591^761 和 X25519 的组合,添加实验性量子计算抗性密钥交换方法。
ssh-keygen(1):将默认 RSA 密钥大小增加到 3072 位。
ssh(1):允许“PKCS11Provider = none”覆盖 ssh_config 中 PKCS11Provider 指令的后续实例。
ssh(1):提示是否录制新主机密钥时,输入密钥指纹作为“yes”。
ssh-keygen(1):在单个命令行调用上签名多个证书时,允许自动递增证书序列号。
scp(1)、sftp(1):接受 -J 选项作为 scp 和 sftp 命令行上 ProxyJump 的别名。
ssh-agent(1)、ssh-pkcs11-helper(8)、ssh-add(1):接受“-v”命令行标志以增加输出的详细程度;将详细标志传递给子进程,例如从 ssh-agent 启动的 ssh-pkcs11-helper。
ssh-add(1):添加“-T”选项以允许通过执行签名和验证来测试代理中的密钥是否可用。
sshd(8):在 PAM 环境中暴露 $SSH_CONNECTION。
安装方法(划重点!)
1、LINUX4.0升级OPENSSH方法
首先需要配置YUM源!!
Yum配置文件在/etc/yum.repos.d/
挂载安装光盘镜像到/mnt目录,并拷贝光盘文件到创建的/rhel-dvd目录。
mount /dev/cdrom /mnt
屏蔽系统的默认YUM源,并创建新的YUM源文件
cd /etc/yum.repos.d/
mkdir old
mv .repo old/
touch localyum.repo
然后编辑localyunm.repo,内容如下:
[LINUX]
name=LINUX
gpgcheck=0
enable=1
baseurl=file:///mnt
编辑完成后
[root@myhost yum.repos.d]# yum makecache
Loaded plugins: product-id, search-disabled-repos, security, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
LINUX | 4.1 kB 00:00 ...
LINUX /group_gz | 216 kB 00:00 ...
LINUX /filelists_db | 3.4 MB 00:00 ...
LINUX /primary_db | 3.1 MB 00:00 ...
LINUX /other_db | 1.3 MB 00:00 ...
Metadata Cache Created
此方法中的第10步,视情况修改!!!!
1、ssh登录到要安装的服务器上,查看当前版本
[root@localhost ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
2、在/目录下创建/tools目录,通过FTP工具上传安装文件到该目录下
mkdir /tools
使用yum安装Telnet服务
3、为防止重启SSH后无法登录,安装TELNET
yum install -y telnet-server
4、修改telnet文件disable=no(原有值为yes),允许用户远程登录
sed -i '12 s/yes/no/' /etc/xinetd.d/telnet
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
echo 'pts/2' >>/etc/securetty
echo 'pts/3' >>/etc/securetty
5、然后重启服务
service xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
重启后,适用telnet登录LINUX系统。执行之后操作!!
6、用ROOT账户使用telnet登录系统执行修改OPENSSH操作
rpm -e openssh-server-5.3p1-122.el6.x86_64
安装必要的软件包
yum install -y gcc
yum -y install pam-devel
7、安装zlib cd /tools tar -xvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure --prefix=/usr/local/zlib && make && make install cd .. 8、安装openssl tar -zxvf openssl-1.0.2h.tar.gz cd openssl-1.0.2h ./config --prefix=/usr/local/openssl && make depend && make && make install cd .. 9、安装openssh tar -zxvf openssh-8.0p1.tar.gz cd openssh-8.0p1 10、修改version.h文件,把里面””里面的内容改成“空格”。 /* $OpenBSD: version.h,v 1.80 2017/09/30 22:26:33 djm Exp $ */ #define SSH_VERSION " " #define SSH_PORTABLE " " #define SSH_RELEASE SSH_VERSION SSH_PORTABLE 11、然后再在执行编译安装 ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --with-md5-passwords --with-pam --without-hardening && make && make install 12、拷贝SSHD服务文件 cp contrib/redhat/sshd.init /etc/init.d/sshd chmod +x /etc/init.d/sshd 13、修改SSHD服务文件,修改对应指令的安装目录 vi /etc/init.d/sshd SSHD=/usr/sbin/sshd 为 SSHD=/usr/local/openssh/sbin/sshd /usr/bin/ssh-keygen -A 为 /usr/local/openssh/bin/ssh-keygen -A 14、保存退出 把SSHD加入到系统服务 chkconfig --add sshd 15、查看系统启动服务是否增加改项 chkconfig --list |grep sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 16、重新启动SSHD服务。 service sshd start 17、替换SSH及SSL命令 mv /usr/bin/ssh /usr/bin/ssh.old ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh mv /usr/bin/openssl /usr/bin/openssl.old ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl 18、检查相关软件版本 [root@myhost ~]# ssh -V OpenSSH_8.0p1, OpenSSL 1.0.2h 3 May 2016 [root@myhost ~]# openssl version -a OpenSSL 1.0.2h 3 May 2016 built on: reproducible build, date unspecified platform: linux-x86_64 options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) compiler: gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM OPENSSLDIR: "/usr/local/openssl/ssl" 升级到新版本后,默认不允许root用户远程登录,修改/etc/ssh/sshd_config配置文件。 PermitRootLogin yes 重新启动SSHD服务。 service sshd start 测试登录SSH,测试成功后,删除TELNET rpm -e telnet-server-0.17-47.el6_3.1.x86_64 rpm -e xinetd-2.3.14-39.el6_4.x86_64
2、LINUX5.0升级OPENSSH方法
首先需要配置YUM源!!
Yum配置文件在/etc/yum.repos.d/
挂载安装光盘镜像到/mnt目录,并拷贝光盘文件到创建的/rhel-dvd目录。
mount /dev/cdrom /mnt
屏蔽系统的默认YUM源,并创建新的YUM源文件
cd /etc/yum.repos.d/
mkdir old
mv .repo old/
touch localyum.repo
然后编辑localyunm.repo,内容如下:
[LINUX]
name=LINUX
gpgcheck=0
enable=1
baseurl=file:///mnt
编辑完成后
[root@myhost yum.repos.d]# yum makecache
Loaded plugins: product-id, search-disabled-repos, security, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
LINUX | 4.1 kB 00:00 ...
LINUX /group_gz | 216 kB 00:00 ...
LINUX /filelists_db | 3.4 MB 00:00 ...
LINUX /primary_db | 3.1 MB 00:00 ...
LINUX /other_db | 1.3 MB 00:00 ...
Metadata Cache Created
此方法中的第10步,视情况修改!!!!
1、ssh登录到要安装的服务器上,查看当前版本
[root@localhost ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
2、在/目录下创建/tools目录,通过FTP工具上传安装文件到该目录下
mkdir /tools
使用yum安装Telnet服务
3、为防止重启SSH后无法登录,安装TELNET
yum install -y telnet-server
4、修改telnet文件disable=no(原有值为yes),允许用户远程登录
sed -i '12 s/yes/no/' /etc/xinetd.d/telnet
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
echo 'pts/2' >>/etc/securetty
echo 'pts/3' >>/etc/securetty
5、然后重启服务
service xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
重启后,适用telnet登录LINUX系统。执行之后操作!!
6、用ROOT账户使用telnet登录系统执行修改OPENSSH操作
rpm -e openssh-server-5.3p1-122.el6.x86_64
安装必要的软件包
yum install -y gcc
yum -y install pam-devel
7、安装zlib
cd /tools
tar -xvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib && make && make install
cd ..
8、安装openssl
tar -xvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
./config --prefix=/usr/local/openssl && make depend && make && make install
cd ..
9、安装openssh
tar -xvf openssh-8.0p1.tar.gz
cd openssh-8.0p1
10、修改version.h文件,把里面””里面的内容改成“空格”。
/* $OpenBSD: version.h,v 1.80 2017/09/30 22:26:33 djm Exp $ */
#define SSH_VERSION " "
#define SSH_PORTABLE " "
#define SSH_RELEASE SSH_VERSION SSH_PORTABLE
11、然后再在执行编译安装
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl --with-zlib=/usr/local/zlib --with-md5-passwords --with-pam --without-hardening && make && make install
12、拷贝SSHD服务文件
cp contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
13、修改SSHD服务文件,修改对应指令的安装目录
vi /etc/init.d/sshd
SSHD=/usr/sbin/sshd 为 SSHD=/usr/local/openssh/sbin/sshd
/usr/bin/ssh-keygen -A 为 /usr/local/openssh/bin/ssh-keygen -A
14、保存退出
把SSHD加入到系统服务
chkconfig --add sshd
15、查看系统启动服务是否增加改项
chkconfig --list |grep sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
16、重新启动SSHD服务。
service sshd start
17、替换SSH及SSL命令
mv /usr/bin/ssh /usr/bin/ssh.old
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
18、检查相关软件版本
[root@myhost ~]# ssh -V
OpenSSH_8.0p1, OpenSSL 1.0.2h 3 May 2016
[root@myhost ~]# openssl version -a
OpenSSL 1.0.2h 3 May 2016
built on: reproducible build, date unspecified
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/usr/local/openssl/ssl"
2.19、升级到新版本后,默认不允许root用户远程登录,修改/etc/ssh/sshd_config配置文件。
PermitRootLogin yes
2.20、重新启动SSHD服务。
service sshd start
2.21、测试登录SSH,测试成功后,删除TELNET
rpm -e telnet-server-0.17-47.el6_3.1.x86_64
rpm -e xinetd-2.3.14-39.el6_4.x86_64
3、LINUX6.0升级OPENSSH方法
安装TELNET,防止OPENSSH服务失败
安装telnet-server及xinetd包
适用rpm –ivh安装这两个包
如果想直接以root用户登录对方主机,可以在修改对方主机上的配置文件/etc/pam.d/remote
注释/etc/pam.d/remote的第一行,
即:#auth required pam_securetty.so
启动telnet服务
systemctl start telnet.socket && systemctl start xinetd
之后常用telnet登录系统
3.1、备份原有配置文件,并修改 cp /etc/pam.d/sshd /root mv /etc/pam.d/sshd /etc/pam.d/sshd.old
3.2、检查是否包含openssh-askpass包 执行rpm -qa|grep openssh-askpass 如果返回存在openssh-askpass-<版本>.x86_64包,则需要卸载该安装包 执行 rpm -e <安装包名>
3.3、拷贝openssh安装包到服务器 创建安装包目录mkdir /openssl 使用XFTP或其它FTP工具,把以下安装包拷贝到/openssl目录 openssh-8.0p1-1.el6.x86_64.rpm openssh-clients-8.0p1-1.el6.x86_64.rpm openssh-debuginfo-8.0p1-1.el6.x86_64.rpm openssh-server-8.0p1-1.el6.x86_64.rpm
3.4、执行升级命令 cd /openssh rpm -Uvh *.rpm
3.5、恢复配置文件 Vi修改/etc/ssh/sshd_config文件,修改如下内容:
#PermitRootLogin prohibit-password 修改为PermitRootLogin yes #UsePAM no 修改为 UsePAM yes
恢复sshd配置文件 cp /root/sshd /etc/pam.d/ 提示输入y确认
3.6、重新生成加密秘钥 cd /etc/ssh/ mkdir old mv ssh_host_* old 最后重新启动SSH服务 /etc/init.d/sshd restart 重启之后检查ssh -V 当前版本是否为8.0 4、LINUX7.0升级OPENSSH方法 安装TELNET,防止OPENSSH服务失败 安装telnet-server及xinetd包 适用rpm –ivh安装这两个包 如果想直接以root用户登录对方主机,可以在修改对方主机上的配置文件/etc/pam.d/remote 注释/etc/pam.d/remote的第一行, 即:#auth required pam_securetty.so 启动telnet服务 systemctl start telnet.socket && systemctl start xinetd 之后常用telnet登录系统
4.1、备份原有配置文件,并修改 cp /etc/pam.d/sshd /root mv /etc/pam.d/sshd /etc/pam.d/sshd.old
4.2、检查是否包含openssh-askpass包 执行rpm -qa|grep openssh-askpass 如果返回存在openssh-askpass-<版本>.x86_64包,则需要卸载该安装包 执行 rpm -e <安装包名>
4.3、拷贝openssh安装包到服务器 创建安装包目录mkdir /openssh 使用XFTP或其它FTP工具,把以下安装包拷贝到/openssh目录 openssh-8.0p1-1.el6.x86_64.rpm openssh-clients-8.0p1-1.el6.x86_64.rpm openssh-debuginfo-8.0p1-1.el6.x86_64.rpm openssh-server-8.0p1-1.el6.x86_64.rpm
4.4、执行升级命令 cd /openssh rpm -Uvh *.rpm
4.5、恢复配置文件 Vi修改/etc/ssh/sshd_config文件,修改如下内容:
#PermitRootLogin prohibit-password 修改为PermitRootLogin yes #UsePAM no 修改为 UsePAM yes
恢复sshd配置文件 cp /root/sshd /etc/pam.d/ 提示输入y确认
4.6、重新生成key秘钥 cd /etc/ssh mkdir key_bak mv ssh_host_* key_bak 最后重新启动SSH服务
4.7、重启SSHD /etc/init.d/sshd restart 重启之后检查ssh -V 当前版本是否为8.0
5、UBUNTU系统升级
适用于一下版本UBUNTU jcadmin@ubuntu:~/deb$ uname -a Linux ubuntu 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux jcadmin@ubuntu:~/deb$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04 LTS Release: 12.04 Codename: precise
5.1、安装必备包 上传安装包deb.tar source_ssh.tar ssh5.9.tar sudo cp /etc/init.d/ssh /etc/init.d/ssh.old tar -xvf deb.tar cd deb sudo dpkg -i *.deb netstat -a | grep telnet
5.2、telnet 登录,卸载ssh sudo dpkg -r openssh-server sudo dpkg -r openssh-client cd /etc/ sudo mv ssh/ ssh.old
5.3、安装软件包 cd ~ tar -xvf source_ssh.tar cd source_ssh/ tar -xvf zlib-1.2.8.tar.gz cd zlib-1.2.8/ sudo ./configure sudo make && sudo make install cd .. tar -xvf openssl-1.0.2s.tar.gz cd openssl-1.0.2s/ sudo ./config -fPIC sudo make && sudo make install cd .. tar -xvf openssh-8.0p1.tar.gz cd openssh-8.0p1/ sudo ./configure --sysconfdir=/etc/ssh --with-md5-passwords --with-ssl-dir=/usr/local/ssl sudo make && sudo make install
如果make install 报错提示ssh用户不存在,增加SSH用户信息 sudo vi /etc/passwd 增加sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin
5.4、恢复服务 sudo cp /usr/local/sbin/sshd /usr/bin/ sudo cp /usr/local/sbin/sshd /usr/sbin/ sudo cp /etc/init.d/ssh.old /etc/init.d/ssh sudo service ssh stop sudo service ssh start 本地ssh -V查看版本 远程主机telnet 该主机22端口,看返回版本是否为8.0 适用SSH远程登录,测试。 如成功升级,卸载telnetd,执行如下命令: sudo dpkg -r telnetd
附件i、如果ssh服务开机不自动启动按如下修改 vim /etc/rc.local 在exit 0上一行添加 /usr/local/openssh/sbin/sshd 所有内容收录在百度网盘,欢迎下载交流: 链接:https://pan.baidu.com/s/1JY4EaBEuRk_8bSn2fgH0KQ 提取码:60uu
欢迎关注我的个人公众号