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

推荐订阅源

Vercel News
Vercel News
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
MyScale Blog
MyScale Blog
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
C
Check Point Blog
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
U
Unit 42
WordPress大学
WordPress大学
B
Blog
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
D
DataBreaches.Net
G
Google Developers Blog
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家

博客园 - 黑米

卸载 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 执行文件的路径。然后重启服务器。