[CNBLOGから転載] Centos7アップグレードopensshバージョン

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

おすすめ

転載: blog.csdn.net/u010472858/article/details/105470955