chmod: changing permissions of ‘authorized_keys’: Operation not permitted

阿里云服务器 SSH 免密登录服务器:

打开 shell 执行下面的命令:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

xxx.xxx.xxx.xxx 为阿里云服务器的公网 ip

执行完命令发现报错了,远程被拒绝写入!

登录阿里云服务器,发现 authorized_keys 只有读权限,没有写权限。

chmod: changing permissions of ‘authorized_keys’: Operation not permitted_第1张图片
于是乎很熟悉的给文件加写的权限:

chmod 777 authorized_keys

报下面的错误:

chmod: changing permissions of ‘authorized_keys’: Operation not permitted

加上 sudo 继续执行,还是报错!

sudo chmod 777 authorized_keys

一般来说,root 用户的权限是最大了,难道还有 root 用户操作不了的文件?

后来经过查找和学习,chmod 的底层实现是 chattr 命令,用此命的功能更为强大,甚至可以锁定文件,即使 root 用户也操作不了此文件。

修改不了也不足为怪了!

然后执行下面的命令查看当前文件属性,可以发现有 i 和 a 两个属性:

lsattr authorized_keys

在这里插入图片描述

说明此时的文件是被锁定的,任何用户都是修改不了的,那么我们就去掉这两个属性:

chattr -ia authorized_keys 

减号(-)代表去掉的意思,反之加号(+)代表增加的意思。

然后我们给文件加上读写和执行的权限,这样文件的属性就更改了!

chmod 777 authorized_keys

我们再执行写入公钥的命令:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

ok, 现在可以写入成功了~

我们来测试下:

ssh [email protected]

输入完命令后直接回车,就可以登录阿里云服务器了,不用输入密码特别方便。

为了简化命令,我们可以设置一个 alias。

用 vim 编辑你本地的 .bash_profile 文件,我用的是 zsh,所以编辑的是 .zshrc 文件。

加入如下代码:

# 设置命令的别名
# 阿里云
alias ali='ssh [email protected]'

xxx.xxx.xxx.xxx 替换为你的阿里云的公网 ip 地址。

然后让刚才修改的配置生效,执行下面的命令:

source .zshrc

修改完成后需要重新打开当前的 shell 或者新开一个 Tab 窗口。

然后输入命令:

ali

直接回车就可以登录阿里云服务器了,特别方便和快捷。

刚才,我们修改了 authorized_keys 文件的权限和锁定,我们现在还要还原回去。

先修改文件的权限,只保留一个读的权限就可以了:

chmod 400 authorized_keys

最后再锁定文件:

chattr +ia authorized_keys 

这样就算修改完成了,但是这里有个问题,我们既然设置了使用公私钥验证登录服务器,那么我们就可以禁用掉使用密码登录服务器的这种方式了。

这样做有个好处就是当你的阿里云登录密码不小心别泄露出去了,别人也是登录不上去的,所以更加安全。

登录服务器,修改 /etc/ssh/sshd_config 文件:

vim /etc/ssh/sshd_config

找到其中 3 行命令更改,前面若带 #,就删掉,作用是可以用密钥登陆服务器:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

然后修改 PasswordAuthentication 属性为 no,即禁用掉密码登陆:

PasswordAuthentication no

重启 sshd 服务:

systemctl restart sshd.service

温馨提示:本地公私密钥请保存好,服务器 authorized_keys 文件中公钥也别乱修改,否则一旦有问题就登录不了服务器,麻烦就大了!

ok, 今天的分享就到这里,如果有问题欢迎在下面给我留言。

你可能感兴趣的:(Linux,authorized_keys,chmod,Operation,not,permitted,centos)