一、配置本地yum源
1.备份原有yum源
cd /etc/yum.repos.d/
mkdir bak
mv *.repo ./bak/
2.为DVD创建一个挂载目录
mkdir /fcy
3.在Linux下挂载CentOS DVD
mount -t auto /dev/cdrom /fcy
4.新增修改repo文件
vi 1.repo
添加如下内容:
[fcy]
name=fcy
baseurl=file:///fcy
gpgcheck=1
enabled=1
其中baseurl修改为DVD的挂载目录centos ssh 下载文件,enabled=1开启本地更新模式
5.清除原有的yum信息
yum clean all
6.检查DVD软件列表
yum list
PS.每次重启系统后需要手工挂载DVD到/media/CentOS/,如果嫌麻烦可以自己写脚本自动挂载
二、Centos6.8升级默认OpenSSH版本的操作记录
查看操作系统版本
[root@openfire01 ~]# cat /etc/redhat-release #或者执行"cat /etc/issue"
CentOS release 6.8 (Final)
查看默认的OpenSSH版本
[root@openfire01 ~]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
openssl默认版本如下,这个是关系到下面编译安装openssh的成功与否。
[root@openfire01 ~]# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
备份ssh目录(此步非常重要,一定要记得提前做备份)
[root@openfire01 ~]# cp -rf /etc/ssh /etc/ssh.bak
安装telnetredflag linux,记得提前部署telnet远程登录环境(root用户登录),避免ssh升级出现问题,导致无法远程管理!
[root@openfire01 ~]# yum install telnet-server
[root@openfire01 ~]# vim /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no #将默认的yes修改为no。开启telnet服务功能,否则telnet启动后,23端口就会起不来!
}
重启telnet服务
[root@openfire01 ~]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]
[root@openfire01 ~]# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
telnet默认用于远程登录的端口是23(21是默认的ftp端口、22是默认的ssh端口、23是默认的telnet端口)
[root@openfire01 ~]# lsof -i:23
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 2489 root 5u IPv6 22131982 0t0 TCP *:telnet (LISTEN)
关闭iptables防火墙和selinux。如果开启了iptables防火墙linux伊甸园,则需要开启23端口(即"iptables -I INPUT -p tcp --dport 23 -j ACCEPT" 和"iptables -I INPUT -p udp --dport 23 -j ACCEPT" )。
[root@openfire01 ~]# /etc/init.d/iptables stop
[root@openfire01 ~]# vim /etc/sysconfig/selinux
.......
SELINUX=disabled
[root@openfire01 ~]# setenforce 0
setenforce: SELinux is disabled
=====================================================================================================================
默认情况下,linux不允许root用户以telnet方式登录linux主机,若要允许root用户登录,可采取以下两种方法中的任何一种方法:
1)第一种方法:修改securetty文件
增加pts配置。如果登录用户较多,需要更多的pts/*。
[root@openfire01 ~]# vim /etc/securetty
......
pts/0
pts/1
pts/2
2)第二种方法:移除securetty文件
验证规则设置在/etc/security文件中,该文件定义root用户只能在tty1-tty6的终端上记录,删除该文件或者将其改名即可避开验证规则实现root用户远程登录。
[root@openfire01 ~]# rm -rf /etc/securetty
以上两种方法中的任意一种设置后,在客户端使用telnet远程登录目标服务器(使用root用户)都是可以的!
建议选择第一种!!!!!!
192.168.0.206是telnet目标服务器,192.168.0.202是客户端机器。
[root@client ~]# telnet 192.168.0.206 23
Trying 192.168.0.206...
Connected to 192.168.0.206.
Escape character is '^]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
Centos6.8-OS login: root
Password:
Last login: Tue Aug 14 14:28:02 from 192.168.0.202
------------------------温馨提示-------------------------
一般不建议直接用root用户远程通过telnet登陆系统,因为telnet在数据传输过程采用明文方式,如果,数据包被人截获,将会很容易获取root用户的登陆口令;
还是建议以普通用户通过telnet远程登陆,然后su到root,这样相对比较安全。如果非要用root用户远程连接,建议采用SSH.
如上操作后,就可以使用root账号进行telnet登录服务器了!OpenSSH升级后建议再修改回还原设置(即禁止root用户进行telnet登录)。
==========================================================================================================================
安装高版本的OpenSSH
升级前需要先安装几个组件
[root@openfire01 ~]# yum install -y gcc openssl-devel pam-devel rpm-build tcp_wrappers-devel
本案例升级openssh选择的是openssh-9.0p1.tar.gz
[root@openfire01 ~]# cd /usr/local/src/
[root@openfire01 src]# ll openssh-9.0p1.tar.gz
-rw-r--r--. 1 root root 1822183 Jun 18 05:37 openssh-9.0p1.tar.gz
[root@openfire01 src]# tar -zvxf openssh-9.0p1.tar.gz
[root@openfire01 src]# cd openssh-9.0p1
[root@openfire01 openssh-9.0p1]# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
[root@openfire01 ~]# make && make install
安装后提示:
/etc/ssh/ssh_config already exists, install will not overwrite
/etc/ssh/sshd_config already exists, install will not overwrite
/etc/ssh/moduli already exists, install will not overwrite
ssh-keygen: generating new host keys: ECDSA ED25519
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
修改配置文件,允许root登录
[root@openfire01 openssh-9.0p1]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
[root@openfire01 openssh-9.0p1]# cat /etc/ssh/sshd_config|grep RootLogin
PermitRootLogin yes
重启OpenSSH
[root@openfire01 openssh-9.0p1]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: /etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
[ OK ]
如上重启OpenSSH出现的告警错误,解决办法如下:
将/etc/ssh/sshd_config文件中以上行数内容注释下即可
[root@openfire01 openssh-9.0p1]# sed -i '/^GSSAPICleanupCredentials/s/GSSAPICleanupCredentials yes/#GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config
[root@openfire01 openssh-9.0p1]# sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication yes/#GSSAPIAuthentication yes/' /etc/ssh/sshd_config
[root@openfire01 openssh-9.0p1]# sed -i '/^GSSAPIAuthentication/s/GSSAPIAuthentication no/#GSSAPIAuthentication no/' /etc/ssh/sshd_config
再次重启OpenSSH服务,则不会出现错误了
[root@openfire01 openssh-9.0p1]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
升级后版本
[root@openfire01 openssh-9.0p1]# ssh -V
OpenSSH_9.0p1, OpenSSL 1.0.1e-fips 11 Feb 2013
----------------------------------------------------------------------------------------------------
温馨提示:
1)由于之前将原ssh目录修改名字了("mv /etc/ssh /etc/ssh_bak"),修改后,需要立即需要修改下配置:
修改配置文件,禁止root登录
[root@openfire01 ~]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
可以不操作,禁止dns解析
[root@openfire01 ~]# sed -i '/^#UseDNS yes/s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
可以不操作默认是22,修改ssh端口至6022
[root@openfire01 ~]# echo "Port 6022" >> /etc/ssh/sshd_config
注意:
- 在升级SSH时你的SSH是不会因为升级或重启服务而断掉的。
- 但是记得OpenSSH升级后,要修改/etc/ssh/sshd_config,将"PermitRootLogin no" 改为 "PermitRootLogin yes",然后再重启OpenSSH服务,
否则,再另开一个终端窗口,使用root用户ssh登录该机器就会失败了centos ssh 下载文件,因为此时ssh已经禁止root用户登录了!
2)更新后ssh有如下提示,但不影响使用:
[root@openfire01 ~]# ssh -p22 192.168.0.206
/etc/ssh/ssh_config line 50: Unsupported option "gssapiauthentication"
解决措施:
注释/etc/ssh/ssh_config的gssapiauthentication内容
----------------------------------------------------------------------------------------------------
重要提示:
1)在升级完openssh版本后,如果你进行了系统update或者升级用到ssh包的相关软件包,会导致ssh的版本回退到原来的版本。
升级前:
升级后:
三、在centos7下升级openssh之后的问题
上面的升级操作同样可以在centos7系统下进行,升级前,centos7默认版本
[root@centos7 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
在centos7服务器上执行上面的一键升级脚本,执行后检查ssh版本:
[root@centos7 ~]# ssh -V
OpenSSH_9.0p1, OpenSSL 1.0.2k-fips 26 Jan 2017
此时重启ssh服务(systemctl restart sshd),会一直卡着,使用"systemctl status sshd"查看,会提示几个文件权限过大
修改几个文件权限
[root@centos7 ~]# chmod 600 /etc/ssh/ssh_host_*
接着再次重启sshd服务,会提示不识别sshd_config文件中第94行、第123行文件。
注释掉这两行内容即可
最后重启ssh服务
[root@centos7 ~]# systemctl restart sshd
会发现重启命令一直在卡着!!!!
发现的坑的情况:
1)发现centos7升级到openssh9.0之后,重启sshd服务会一直在卡着,卡着过程中,在远程使用ssh是可以正常登录本机。
2)但是卡一段时间后(大概2分钟左右),sshd服务就会因为启动超时而关闭,届时在远程使用ssh重新登录本机就会失败!
3)但只要在远程使用ssh成功登录到本机后的终端窗口,不管centos7机器的ssh服务起来与否,该终端窗口始终保持连接!
4)所以,尽管升级后,重启ssh服务是一直卡的状态,但只要是在启动中,远程ssh新连接就不会断开。
5)故要保证升级后,远程使用ssh登录centos7本机不受影响,无感知,就需要升级后的centos7机器的ssh服务一直在启动中。
需要一个保持sshd服务持续启动的脚本
[root@centos7 ~]# cat /opt/ssh-restart.sh
#/bin/bash
ps -ef|grep "systemctl restart sshd"|awk '{print $2}'|xargs kill -9
nohup systemctl restart sshd &
每20秒执行一次脚本
[root@centos7 ~]# crontab -l
* * * * * /bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
* * * * * sleep 20;/bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
* * * * * sleep 40;/bin/bash -x /opt/ssh-restart.sh >/dev/null 2>&1
始终保证一个重启sshd服务的进程在
[root@centos7 ~]# ps -ef|grep "systemctl restart sshd"
root 18368 1 0 17:18 ? 00:00:00 systemctl restart sshd
root 18478 18460 0 17:18 pts/4 00:00:00 grep --color=auto systemctl restart sshd
以上是临时想到的解决办法,究其原因和最终解决办法,还需要进一步分析(后续更新)~
=============补充一下:centos7开启telnet远程登录的方法==============
[root@Centos7 ~]# yum install -y telnet-server xinetd
[root@Centos7 ~]# systemctl enable xinetd.service
[root@Centos7 ~]# systemctl enable telnet.socket
[root@Centos7 ~]# systemctl start telnet.socket
[root@Centos7 ~]# systemctl start xinetd
默认情况下,centos7系统是不允许root用户telnet远程登录的。如果要使用root用户直接登录,有下面两种方法:
1)第一种方法:修改securetty文件
增加pts配置。如果登录用户较多,需要更多的pts/*。
[root@Centos6 ~]# vim /etc/securetty
......
pts/0
pts/1
pts/2
2)第二种方法:移除securetty文件
验证规则设置在/etc/security文件中,该文件定义root用户只能在tty1-tty6的终端上记录,删除该文件或者将其改名即可避开验证规则实现root用户远程登录。
[root@Centos6 ~]# rm -rf /etc/securetty
然后在客户端使用telnet登录
[root@client ~]# telnet 192.168.0.220 23
Trying 192.168.0.220...
Connected to 192.168.0.220.
Escape character is '^]'.
Kernel 3.10.0-862.3.2.el7.x86_64 on an x86_64
Centos7 login: root
Password:
Last login: Wed Aug 15 01:10:15 from ::ffff:192.168.0.39