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 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, 今天的分享就到這裏,如果有問題歡迎在下面給我留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章