惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
A
About on SuperTechFans
博客园 - Franky
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
Last Week in AI
Last Week in AI
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
G
Google Developers Blog

博客园 - 黑米

卸载 nodejs 时报错 you must be an administrator to remove this application 的解决 真心觉得,WIN11就是一个笑话 为 centos7 编译 nginx rabbitmqctl set_permissions 报错 invalid command 你见过最长的类名是什么 记一次 k8s master 节点被 reset 后恢复的过程 java.lang.UnsupportedOperationException: null 解决 calico/node is not ready: BIRD is not ready: BGP not established with 的问题 @Transactional 和 @DSTransactional 混用可能会造成事务死锁 问题解决:idea 中无法连接 sql server 数据库,报错 [08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接 用一个脚本定时清理被驱逐的pod java 里的正则表达式 为何实现了 Filter 的类,能自动添加到 filterChain 中? 如何正确填写 sonar.java.binaries 解决 Tasks support was removed in SonarQube 7.6. 的问题 部署了 prometheus, 在 target 中显示 cadvisor 与 nodes 的状态都是 down k8s 部署了 redis 集群,节点重启后,ip 变化导致集群不可用的问题 mvn deploy 到 nexus,报错 Return code is: 400, ReasonPhrase: Bad Request 关于 mybatis 的 @MapperScan 用法心得
centos7 升级 openssh (用来避坑)
黑米 · 2022-11-29 · via 博客园 - 黑米

是的,踩坑了,导致服务器远程登录不上去,最后只能想其他办法了。所以有必要记下来具体的操作。

环境

centos7.9, 自带的 openssh 为 7.4, 准备升级到 7.9p1.

编译 openssh

先编译 openssh, 根据漏扫报告,openssh 至少要7.8以上,这里用 7.9p1 下载地址是:

https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz?spm=a2c6h.25603864.0.0.686840ad7Rg8Ge

下载完成之后解压:

tar xzvf openssh-7.9p1.tar.gz

接下来准备编译它,先运行 ./configure ,发现少哪个组件就安装。比如说报少 zlib,就通过yum 安装。

yum install zlib-devel

configure 的完整参数是:

./configure --prefix=/usr/local/openssh --exec-prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-selinux --with-tcp-wrappers

如果正常,就可编译了:

make

这里没有 make install 因为我想自己控制安装过程。而且,编译和运行可以在不同的服务器上。

安装 sshd

现在的主要难题是替换 sshd. 如果用下面的命令替换文件,

cp sshd /usr/sbin/

则会报错,无法替换,也就无法升级。

后来想了一个办法,sshd 不是一个服务吗?我可以修改服务配置文件,把 sshd 指向新编译出来的文件,再重启不就行了?等重启成功后,再用新编译的 sshd 替换掉旧的文件(位于 /usr/sbin/sshd),然后再把服务配置文件中的内容改回来,也就修改成功了。

先创建一个目录,用于存放新的 sshd,再将文件复制进去,之所以不用 /root/ 下的路径,可能会有权限的问题.

mkdir -p /data/ssh/
cp sshd /data/ssh/sshd

再编辑服务的配置文件,/usr/lib/systemd/system/sshd.service,把 ExecStart=/usr/sbin/sshd -D $OPTIONS 这一行,改成 ExecStart=/data/ssh/sshd -D $OPTIONS 。然后重启服务器,这时候悲剧发生,ssh 再也连不上服务器了! 因此,绝对不能在这个时候重启,而要调整好配置,再重启。下面是调整配置的地方。

1、调整 ssh 相关 key 的权限。

cd /etc/ssh/
ll *key
# 有三个 key 文件,把它们的权限调整成 600.
chmod 600 *key

上面如果不调整权限,则会报下面的错,导致无法登录。
error: @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
error: Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.

2、然后再编辑 sshd_config, 把下面两行注释掉:

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials no

注释后像这样:

# GSSAPI options
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials no

找到 PermitRootLogin yes 一行,本来是被注释掉的,现在要取消注释。

3、确保 /etc/empty/sshd/ 目录存在,且 owner 为 root, 像下面这样:
[root@localhost ssh]# ll /var/empty/
total 0
drwx--x--x. 2 root root 6 Aug 9 2019 sshd

这时候再重启系统,就能登录了。

之后就是替换原 sshd 的操作。
先备份原文件:

mkdir /data/backup/
cp /usr/sbin/sshd /data/backup/

再把文件复制过去:

cp /data/ssh/sshd /usr/sbin/

再次编辑,/usr/lib/systemd/system/sshd.service,恢复 sshd 执行文件的路径。然后重启服务器。