nmapから運ばれたCnblog:https://www.cnblogs.com/nmap/p/10779658.html
試験終了後、一部箇所を修正・補足(赤字部分)
centos7.3とcentos7.6がアップグレードされた後、テストして再起動した後、sshにログインしても問題はありません。
yumソースを自分で構成してください(Baiduの使用方法がわからない場合)
プロセス全体で、元のopensslパッケージとopensshrpmパッケージをアンインストールする必要はありません。当社の事業に影響を与えません
この記事の環境は、システムに付属しているopensshであり、手動でのコンパイルとインストールの経験はありません。以前にopensshを手動でコンパイルしてインストールしたことがある場合は、この記事を参照して、成功するかどうかをテストしてください。
この記事を厳密に参照すれば、問題なくアップグレードできることを保証します
centos7.6アップグレード後の効果
1 2 3 4 5 6 7 8 |
[root@testssh ~] # ssh -V OpenSSH_8.0p1, OpenSSL 1.0.2r 26 Feb 2019 [root@testssh ~] # openssl version OpenSSL 1.0.2r 26 Feb 2019 [root@testssh ~] # cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@testssh ~] # |
アップグレード後のcentos7.3の効果
1 2 3 4 5 6 7 |
[root@linux-node3 ~] # openssl version OpenSSL 1.0.2r 26 Feb 2019 [root@linux-node3 ~] # ssh -V OpenSSH_8.0p1, OpenSSL 1.0.2r 26 Feb 2019 [root@linux-node3 ~] # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@linux-node3 ~] # |
sshバージョンが低すぎる場合は、最初にyum updateopensshを現在のデフォルトのopenssh7.4p1バージョンのyumウェアハウスにアップグレードすることをお勧めします。
デフォルトのcentos7.3sshは次のバージョンです
1 2 3 4 5 |
[root@linux-node3 ~] # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [root@linux-node3 ~] # ssh -V OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013 [root@linux-node3 ~] # |
最初にアップグレードするには、yum update opensshを実行します(とにかく、公式アップグレードは問題ありません。以前にopensshのアップグレードを手動でコンパイルして操作したことがある場合は、デフォルトの構成ファイルパスなどを変更したかどうかを自分でテストしてください)。
(opensshバージョンを7.4p1に統合してから、コンパイル、インストール、およびopenssh8.0p1へのアップグレードを統合する準備ができました)
1 2 3 4 5 |
[root@linux-node3 ~] # yum update openssh -y [root@linux-node3 ~] # ssh -V OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 [root@linux-node3 ~] # |
telnet-serverとxinetdをインストールします
1 2 3 4 5 6 7 8 9 10 11 |
[root@linux-node3 ~] # yum install xinetd telnet-server -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirrors.aliyun.com * extras: mirrors.cn99.com * updates: mirrors.cn99.com Package 2:xinetd-2.3.15-13.el7.x86_64 already installed and latest version Package 1:telnet-server-0.17-64.el7.x86_64 already installed and latest version Nothing to do [root@linux-node3 ~] # |
インストールできない友達がいるかもしれません
更新するときは、ソースパッケージの場所に注意してください。例として163を取り上げます。[パッケージ]で、yumが失敗した場合は、手動で更新します。
http://mirrors.163.com/centos/7/os/x86_64/Packages/
または、yumソースを国内ソースに直接変更します。AlibabaCloudの例を次に示します。
1.最初に、システム自体のyumソース構成ファイル/etc/yum.repos.d/CentOS-Base.repoをバックアップします。
[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu
2、下载ailiyun的yum源配置文件到/etc/yum.repos.d/
CentOS7
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3、运行yum makecache生成缓存
[root@localhost ~]# yum makecache
完成!
配置telnet
现在很多centos7版本安装telnet-server以及xinetd之后没有一个叫telnet的配置文件了。
如果下面telnet文件不存在的话,可以跳过这部分的更改
1 2 |
[root@linux-node3 ~] # ll /etc/xinetd.d/telnet ls : cannot access /etc/xinetd .d /telnet : No such file or directory |
如果下面文件存在,请更改配置telnet可以root登录,把disable = no改成disable = yes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[root@rhel yum.repos.d] # cat /etc/xinetd.d/telnet # default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet {
disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in .telnetd log_on_failure += USERID } [root@rhel yum.repos.d] # vim /etc/xinetd.d/telnet [root@rhel yum.repos.d] # cat /etc/xinetd.d/telnet # default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet {
disable = yes flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in .telnetd log_on_failure += USERID } |
配置telnet登录的终端类型,在/etc/securetty文件末尾增加一些pts终端,如下
1 2 3 4 |
pts /0 pts /1 pts /2 pts /3 |
配置之后的显示
1 2 3 4 5 6 7 8 |
[root@linux-node3 ~] # vim /etc/securetty [root@linux-node3 ~] # tail -5 /etc/securetty xvc0 pts /0 pts /1 pts /2 pts /3 [root@linux-node3 ~] # |
启动telnet服务,并设置开机自动启动
1 2 3 4 5 6 7 8 9 10 11 |
[root@linux-node3 ~] # systemctl enable xinetd [root@linux-node3 ~] # systemctl enable telnet.socket Created symlink from /etc/systemd/system/sockets .target.wants /telnet .socket to /usr/lib/systemd/system/telnet .socket. [root@linux-node3 ~] # [root@linux-node3 ~] # systemctl start telnet.socket [root@linux-node3 ~] # systemctl start xinetd [root@linux-node3 ~] # netstat -lntp|grep 23 tcp6 0 0 :::23 :::* LISTEN 1 /systemd [root@linux-node3 ~] # |
切换到telnet方式登录,以后的操作都在telnet终端下操作,防止ssh连接意外中断造成升级失败
telnet方式登录
安装依赖包
升级需要几个组件,有些是和编译相关的等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@linux-node3 ~] # yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirrors.aliyun.com * extras: mirrors.cn99.com * updates: mirrors.cn99.com Package gcc -4.8.5-36.el7_6.1.x86_64 already installed and latest version Package gcc -c++-4.8.5-36.el7_6.1.x86_64 already installed and latest version Package glibc-2.17-260.el7_6.4.x86_64 already installed and latest version Package 1: make -3.82-23.el7.x86_64 already installed and latest version Package autoconf-2.69-11.el7.noarch already installed and latest version Package 1:openssl-1.0.2k-16.el7_6.1.x86_64 already installed and latest version Package 1:openssl-devel-1.0.2k-16.el7_6.1.x86_64 already installed and latest version Package pcre-devel-8.32-17.el7.x86_64 already installed and latest version Package pam-devel-1.1.8-22.el7.x86_64 already installed and latest version Nothing to do [root@linux-node3 ~] # |
安装pam和zlib等(后面的升级操作可能没用到pam,安装上也没啥影响,如果不想安装pam请自行测试)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[root@linux-node3 ~] # yum install -y pam* zlib* Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirrors.aliyun.com * extras: mirrors.cn99.com * updates: mirrors.cn99.com Package pam_yubico-2.26-1.el7.x86_64 already installed and latest version Package pam_script-1.1.8-1.el7.x86_64 already installed and latest version Package pam_oath-2.4.1-9.el7.x86_64 already installed and latest version Package pam_snapper-0.2.8-4.el7.x86_64 already installed and latest version Package pam_ssh_agent_auth-0.10.3-2.16.el7.x86_64 already installed and latest version Package pam_2fa-1.0-1.el7.x86_64 already installed and latest version Package pam_mapi-0.3.4-1.el7.x86_64 already installed and latest version Package pam_ssh_user_auth-1.0-1.el7.x86_64 already installed and latest version Package pam_mount-2.16-5.el7.x86_64 already installed and latest version Package pam_radius-1.4.0-3.el7.x86_64 already installed and latest version Package pamtester-0.1.2-4.el7.x86_64 already installed and latest version Package pam_afs_session-2.6-5.el7.x86_64 already installed and latest version Package pam_pkcs11-0.6.2-30.el7.x86_64 already installed and latest version Package pam-1.1.8-22.el7.x86_64 already installed and latest version Package pam_ssh-2.3-1.el7.x86_64 already installed and latest version Package 1:pam_url-0.3.3-4.el7.x86_64 already installed and latest version Package pam_wrapper-1.0.7-2.el7.x86_64 already installed and latest version Package pam-kwallet-5.5.2-1.el7.x86_64 already installed and latest version Package pam-devel-1.1.8-22.el7.x86_64 already installed and latest version Package pam_krb5-2.4.8-6.el7.x86_64 already installed and latest version Package zlib-devel-1.2.7-18.el7.x86_64 already installed and latest version Package zlib-static-1.2.7-18.el7.x86_64 already installed and latest version Package zlib-1.2.7-18.el7.x86_64 already installed and latest version Package zlib-ada-1.4-0.5.20120830CVS.el7.x86_64 already installed and latest version Package zlib-ada-devel-1.4-0.5.20120830CVS.el7.x86_64 already installed and latest version Nothing to do [root@linux-node3 ~] # |
下载openssh包和openssl的包
我们都下载最新版本,下载箭头指的包
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
https://ftp.openssl.org/source/
开始安装openssl
PS:如果下载慢或者有问题,可以通过迅雷在windows下载好传过去
个人习惯把安装包或者工具之类的放下面目录。根据个人喜好随便放,不影响安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[root@linux-node3 ~] # mkdir /data/tools -p [root@linux-node3 ~] # cd /data/tools/ [root@linux-node3 /data/tools ] # rz -E rz waiting to receive. [root@linux-node3 /data/tools ] # ll total 5224 -rw-r--r-- 1 root root 5348369 Apr 27 12:19 openssl-1.0.2r. tar .gz 解压文件 [root@linux-node3 /data/tools ] # tar xfz openssl-1.0.2r.tar.gz [root@linux-node3 /data/tools ] # ll total 5228 drwxr-xr-x 20 root root 4096 Apr 27 12:20 openssl-1.0.2r -rw-r--r-- 1 root root 5348369 Apr 27 12:19 openssl-1.0.2r. tar .gz [root@linux-node3 /data/tools ] # cd [root@linux-node3 ~] # 现在是系统默认的版本,等会升级完毕对比下 [root@linux-node3 ~] # openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 [root@linux-node3 ~] # |
备份下面2个文件或目录(如果存在的话就执行)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@linux-node3 ~] # ll /usr/bin/openssl -rwxr-xr-x 1 root root 555248 Mar 12 18:12 /usr/bin/openssl [root@linux-node3 ~] # mv /usr/bin/openssl /usr/bin/openssl_bak [root@linux-node3 ~] # ll /usr/include/openssl total 1864 -rw-r--r-- 1 root root 6146 Mar 12 18:12 aes.h -rw-r--r-- 1 root root 63204 Mar 12 18:12 asn1.h -rw-r--r-- 1 root root 24435 Mar 12 18:12 asn1_mac.h -rw-r--r-- 1 root root 34475 Mar 12 18:12 asn1t.h -rw-r--r-- 1 root root 38742 Mar 12 18:12 bio.h -rw-r--r-- 1 root root 5351 Mar 12 18:12 blowfish.h ...... [root@linux-node3 ~] # mv /usr/include/openssl /usr/include/openssl_bak [root@linux-node3 ~] # |
编译安装新版本的openssl
配置、编译、安装3个命令一起执行
&&符号表示前面的执行成功才会执行后面的
1 2 3 |
[root@linux-node3 ~] # cd /data/tools/openssl-1.0.2r/ [root@linux-node3 /data/tools/openssl-1 .0.2r] # ./config shared && make && make install |
PS:这里安装的时候,最好带上安装路径的参数,以免找不到。例如以下:
.
/config
--prefix=
/usr/
local/openssl &&
make
&&
make
install
如果路径安装错了,没有关系,只要从新安装一次就好了,不用删除。
以上命令执行完毕,echo $?查看下最后的make install是否有报错,0表示没有问题
下面2个文件或者目录做软链接 (刚才前面的步骤mv备份过原来的)
1 2 3 4 5 6 7 |
[root@linux-node3 ~] # ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl [root@linux-node3 ~] # ln -s /usr/local/ssl/include/openssl /usr/include/openssl [root@linux-node3 ~] # ll /usr/bin/openssl lrwxrwxrwx 1 root root 26 Apr 27 12:31 /usr/bin/openssl -> /usr/local/ssl/bin/openssl [root@linux-node3 ~] # ll /usr/include/openssl -ld lrwxrwxrwx 1 root root 30 Apr 27 12:31 /usr/include/openssl -> /usr/local/ssl/include/openssl [root@linux-node3 ~] # |
PS:这里注意路径,我的就不在/usr/local/ssl/,而是在/usr/local/openssl/
命令行执行下面2个命令加载新配置
1 2 3 |
echo "/usr/local/ssl/lib" >> /etc/ld .so.conf /sbin/ldconfig |
查看确认版本。没问题
1 2 |
[root@testssh ~] # openssl version OpenSSL 1.0.2r 26 Feb 2019 |
在执行openssl version时,也可能出现如下错误:
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
参考:https://blog.csdn.net/huangbaokang/article/details/88226952
这是由于openssl库的位置不正确造成的。
解决方法:
在root用户下执行:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
如果不知道位置,现查找下
[root@rjzfwweb lib64]# find / -name libssl.so.1.1
/usr/local/openssl/lib/libssl.so.1.1
所以我的执行命令如下:
[root@rjzfwweb lib64]# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@rjzfwweb lib64]# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
安装openssh
上传openssh的tar包并解压
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@testssh ~] # cd /data/tools/ [root@testssh tools] # ll total 7628 -rw-r--r-- 1 root root 1597697 Apr 18 07:02 openssh-8.0p1. tar .gz drwxr-xr-x 20 root root 4096 Apr 23 23:12 openssl-1.0.2r -rw-r--r-- 1 root root 5348369 Feb 26 22:34 openssl-1.0.2r. tar .gz -rwxr-xr-x 1 root root 853040 Apr 11 2018 sshd [root@testssh tools] # tar xfz openssh-8.0p1.tar.gz [root@testssh tools] # cd openssh-8.0p1 可能文件默认显示uid和gid数组都是1000,这里重新授权下。不授权可能也不影响安装(请自行测试) [root@testssh tools] # chown -R root.root /data/tools/openssh-8.0p1 |
命令行删除原先ssh的配置文件和目录
然后配置、编译、安装
注意下面编译安装命令是两个,1和3/4,然后在文本里弄成一行之后放命令行执行
1 2 3 4 |
rm -rf /etc/ssh/ * . /configure --prefix= /usr/ --sysconfdir= /etc/ssh --with-openssl-includes= /usr/local/ssl/include --with-ssl- dir = /usr/local/ssl --with-zlib --with-md5-passwords --with-pam && make && make install |
PS:这里同样要注意路径问题:/usr/local/ssl/include
和 --with-ssl-
dir
=
/usr/local/ssl
这里的etc/ssh,就是ssh的默认路径,参照1
参考下我的截图
安装完毕 检查下结果
修改配置文件最终为如下内容,其他的不要动
1 2 3 4 5 |
[root@linux-node3 ~] # grep "^PermitRootLogin" /etc/ssh/sshd_config PermitRootLogin yes [root@linux-node3 ~] # grep "UseDNS" /etc/ssh/sshd_config UseDNS no [root@linux-node3 ~] # |
从原先的解压的包中拷贝一些文件到目标位置(如果目标目录存在就覆盖)
(可能下面的ssh.pam文件都没用到,因为sshd_config配置文件貌似没使用它,请自行测试。我这边是拷贝了)
1 2 3 4 5 6 7 |
[root@linux-node3 /data/tools/openssh-8 .0p1] # cp -a contrib/redhat/sshd.init /etc/init.d/sshd [root@linux-node3 /data/tools/openssh-8 .0p1] # cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam [root@linux-node3 /data/tools/openssh-8 .0p1] # chmod +x /etc/init.d/sshd [root@linux-node3 /data/tools/openssh-8 .0p1] # chkconfig --add sshd [root@linux-node3 /data/tools/openssh-8 .0p1] # systemctl enable sshd [root@linux-node3 /data/tools/openssh-8 .0p1] # |
把原先的systemd管理的sshd文件删除或者移走或者删除,不移走的话影响我们重启sshd服务
1 |
[root@linux-node3 ~] # mv /usr/lib/systemd/system/sshd.service /data/ |
设置sshd服务开机启动
1 2 3 |
[root@linux-node3 ~] # chkconfig sshd on Note: Forwarding request to 'systemctl enable sshd.socket' . Created symlink from /etc/systemd/system/sockets .target.wants /sshd .socket to /usr/lib/systemd/system/sshd .socket. |
接下来测试启停服务。都正常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
以后管理sshd通过下面方式了 [root@linux-node3 ~] # /etc/init.d/sshd restart Restarting sshd (via systemctl): [ OK ] [root@linux-node3 ~] # [root@linux-node3 ~] # [root@linux-node3 ~] # netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 31800 /sshd tcp6 0 0 :::22 :::* LISTEN 31800 /sshd tcp6 0 0 :::23 :::* LISTEN 1 /systemd [root@linux-node3 ~] # /etc/init.d/sshd stop Stopping sshd (via systemctl): [ OK ] [root@linux-node3 ~] # netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp6 0 0 :::23 :::* LISTEN 1 /systemd [root@linux-node3 ~] # /etc/init.d/sshd start Starting sshd (via systemctl): [ OK ] [root@linux-node3 ~] # [root@linux-node3 ~] # |
使用systemd方式也行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@linux-node3 ~] # systemctl stop sshd [root@linux-node3 ~] # netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp6 0 0 :::23 :::* LISTEN 1 /systemd [root@linux-node3 ~] # systemctl start sshd [root@linux-node3 ~] # netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 31958 /sshd tcp6 0 0 :::22 :::* LISTEN 31958 /sshd tcp6 0 0 :::23 :::* LISTEN 1 /systemd [root@linux-node3 ~] # systemctl restart sshd [root@linux-node3 ~] # netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID /Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 31999 /sshd tcp6 0 0 :::22 :::* LISTEN 31999 /sshd tcp6 0 0 :::23 :::* LISTEN 1 /systemd [root@linux-node3 ~] # |
测试版本。都正常
1 2 3 4 5 6 7 8 9 |
[root@linux-node3 ~] # ssh -V OpenSSH_8.0p1, OpenSSL 1.0.2r 26 Feb 2019 [root@linux-node3 ~] # [root@linux-node3 ~] # telnet 127.0.0.1 22 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]' . SSH-2.0-OpenSSH_8.0 |
PS:最后,因为替换了ssh,以前做的ssh配置就都没有了,还要修改端口号等信息
如果不是生产机器。可以试着重启机器测试下登录sshd是否正常。我这边测试都没问题
测试没问题后可以把telnet服务关闭了
1 2 3 4 5 6 |
[root@linux-node3 ~] # systemctl disable xinetd.service Removed symlink /etc/systemd/system/multi-user .target.wants /xinetd .service. [root@linux-node3 ~] # systemctl stop xinetd.service [root@linux-node3 ~] # systemctl disable telnet.socket [root@linux-node3 ~] # systemctl stop telnet.socket [root@linux-node3 ~] # netstat -lntp |