赞
踩
生产环境经常会被扫到openssh漏洞,一般需要对openssh进行升级。
为防止openssh升级失败导致无法远程,可通安装telnet-server,登录telnet远程到主机
#安装telnet-server
yum install -y telnet-server
#修改/etc/securetty,在最后添加
vim /etc/securetty
pts/0
pts/1
pts/2
pts/3
#启动telnet-server服务
systemctl start telnet.socket
#然后通过telnet尝试登录,登录成功后再进行下一步比较保险
(1) 如果原主机安装的openssh是通过rpm包安装的,需要先卸载
systemctl stop sshd
yum remove -y openssh
(2) 下载openssh源码包
wget -c https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz
(3) 备份配置文件
mv /etc/ssh /etc/ssh.bak
(4) 编译安装openssh
tar -xf openssh-8.1p1.tar.gz
cd openssh-8.1p1
#编译安装
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh
make && make install
#说明:
--prefix 指定安装目录,如果之前主机上的openssh是编译安装的,建议指定一个文件夹安装,如果之前主机上的openssh是rpm包安装的,rpm卸载后,建议将安装目录指定为/usr;不指定的话默认安装目录为/usr/local
--sysconfdir 指定系统配置文件目录,建议使用/etc/ssh,记得提前备份;这里使用/etc/ssh是因为如果指定了安装目录,其编译后的ssh命令和sshd命令会默认在/etc/ssh目录找ssh_config和sshd_config配置文件,如果不指定这个选项而只指定--prefix选项,如 --prefix=/usr/local/openssh,其编译后的ssh命令和sshd命令运行时,会应用/usr/local/openssh/etc目录下的ssh_config和sshd_config配置文件
#其它选项,根据需要选择
--with-ssl-dir=/usr/bin/openssl 指定OpenSSL路径
--with-pam 启用pam支持
--with-md5-passwords 启用md5密码支持
(4) 替换命令
如果之前主机上的openssh是编译安装的(编译安装路径为/usr),则将原来的命令备份一下,然后将编译好的命令复制到相应文件夹
#备份命令
mv /usr/bin/ssh /usr/bin/ssh.bak
mv /usr/sbin/sshd /usr/sbin/sshd.bak
#拷贝命令
cp /usr/local/openssh/bin/ssh /usr/bin/
cp /usr/local/openssh/sbin/sshd /usr/sbin/
如果之前主机上的openssh是rpm包安装的,卸载后,只需在第4步编译时指定--prefix=/usr
进行编译安装即可,如果指定的为--prefix=/usr/local/openssh
,则按以下操作
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
echo 'export PATH=/usr/local/openssh/bin:$PATH' >> /etc/profile
source /etc/profile
(5) 修改sshd配置文件
#新生成的sshd_config文件默认大部分配置都是注释的,需要添加以下配置
vim /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
PermitEmptyPasswords no
UseDNS no
(6) 启动sshd服务
#备份启动脚本(如果有)
mv /etc/init.d/sshd /etc/init.d/sshd.bak
#准备脚本,源码包解压的目录openssh-8.1p1下
cp contrib/redhat/sshd.init /etc/init.d/sshd
#添加开机启动
chkconfig --add sshd
#启动服务
/etc/init.d/sshd start
#查看ssh配置
ssh -V
(7) 测试远程连接
终端先不要关闭,另开一个终端测试远程连接,如果成功了则没什么大问题了,之后把telnet-server卸载
#修改/etc/securetty,删除之前添加的四行
vim /etc/securetty
pts/0
pts/1
pts/2
pts/3
#卸载telnet-server
systemctl stop telnet.socket
yum remove -y telnet-server
(8) 升级后,使用ssh客户端连接其它主机时,如果出现以下错误:
Unable to negotiate with 192.168.80.17 port 22: no matching cipher found. Their offer: aes128-cbc
则修改/etc/ssh/ssh_config文件
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
# 找到以上行的位置,在其下添加以下一行内容即可
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
(9) 小技巧
生产环境有时怕出问题,不敢进行大的操作,可以在本地虚拟机上编译成功后,将ssh和sshd两个命令替换到生产环境,也能达到效果,也可在编译时指定--prefix=/usr
,然后将编译后的相关目录命令全部替换到生产环境。
#将/usr/local/openssh/bin/ssh和/usr/local/openssh/sbin/sshd上传至root家目录
#备份
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /usr/bin/ssh /usr/bin/ssh.bak
#拷贝
mv ssh /usr/bin/ssh
mv sshd /usr/sbin/sshd
#添加权限
chmod +x /usr/sbin/sshd /usr/bin/ssh
#重启sshd服务
systemctl restart sshd
#如果是指定--prefix=/usr,其安装的内容如下: /usr ├── bin │ ├── scp │ ├── sftp │ ├── ssh │ ├── ssh-add │ ├── ssh-agent │ ├── ssh-keygen │ └── ssh-keyscan ├── libexec │ ├── sftp-server │ ├── ssh-keysign │ └── ssh-pkcs11-helper ├── sbin │ └── sshd └── share └── man ├── man1 │ ├── scp.1 │ ├── sftp.1 │ ├── ssh.1 │ ├── ssh-add.1 │ ├── ssh-agent.1 │ ├── ssh-keygen.1 │ └── ssh-keyscan.1 ├── man5 │ ├── moduli.5 │ ├── ssh_config.5 │ └── sshd_config.5 └── man8 ├── sftp-server.8 ├── sshd.8 ├── ssh-keysign.8 └── ssh-pkcs11-helper.8 #源码包中还有一个ssh-copy-id的命令,记得拷贝至/usr/bin目录 cp contrib/ssh-copy-id /usr/bin/ chmod +x /usr/bin/ssh-copy-id
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。