阿里云服务器 SSH 免密登录服务器:
打开 shell 执行下面的命令:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx
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 root@xxx.xxx.xxx.xxx
ok, 现在可以写入成功了~
我们来测试下:
ssh root@xxx.xxx.xxx.xxx
输入完命令后直接回车,就可以登录阿里云服务器了,不用输入密码特别方便。
为了简化命令,我们可以设置一个 alias。
用 vim 编辑你本地的 .bash_profile 文件,我用的是 zsh,所以编辑的是 .zshrc 文件。
加入如下代码:
# 设置命令的别名
# 阿里云
alias ali='ssh root@xxx.xxx.xxx.xxx'
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, 今天的分享就到这里,如果有问题欢迎在下面给我留言。