SSH实现免密码登录远程服务器并且关闭密码登录功能

标题好长……这次被黑之后吸取了教训,大致说一下做的事情:

首先能不用root就不用root,除了由于普通用户拿不到权限的部分以外都使用普通用户(如Node.js程序的运行),不关闭SELINUX,开启iptables(这里需要说一下,只要开启了防火墙就会生成iptables),未开启则没有,所以才会出现找不到iptables的情况。

免密码具体就是用证书(非对称加密)来登录,处理起来其实也是蛮方便的(但如果一个手滑可能会导致登录不上去)。

如果过去没有生成过证书,则需要先运行 ssh-keygen -t rsa,之后再~/.ssh/目录会生成公钥和私钥,如果运行过了,就不要重复运行了。

之后把公钥(xxx.pub),传到服务器中的~/.ssh/目录下,重命名为authorized_keys,如果已经有该文件,则把公钥内容加入文末。

之后设置authorized_keys权限为600(必须严格设置好,否则风险极大)。

之后开启公钥登录的方法,在/etc/ssh/sshd_config找到PubkeyAuthentication,取消注释并改为PubkeyAuthentication yes

保存并验证(需要重启service sshd restart)。

之后我们在客户端用ssh user@ip登录,如果可以,那么接下来就能关闭密码登录了,再次进入配置文件,找到PasswordAuthentication改为no,ChallengeResponseAuthentication改为no。

再次保存并重启,之后就无法用密码登录了,不过,密码登录的修改是针对全局,而证书是针对单用户,如果需要多用户都配置证书,重复加入authorized_keys即可。

需要注意的是整个操作如果你没有VNC或者自动恢复的脚本还是比较危险的(可能会导致无法登录),所以谨慎操作。

如果您觉得文章不错,可以通过赞助支持我

标签: centos, 命令, 使用

仅有一条评论

  1. chz

    开密码登录也没事,装个Denyhosts或者写个脚本监测 /var/log/secure,将尝试登录失败次数过多的IP加入到hosts.deny屏蔽掉即可。
    yum -y install epel-release
    yum install denyhosts
    再去把denyhosts启动即可。

添加新评论