centos开启ssh密钥登录总结
时间:2017-3-29 16:39 作者:admin 分类: Linux
centos开启SSH的密钥登录相信大家都会吧,而且很多的一键脚本都会配备,比如wdlinux面板的一件安装包都会配备而且支持自定义修改SSH端口,和一键生成密钥,很方便的,但是我们有时候没有必要安装这些一键脚本(比如内存小,不是用来做web服务的等等原因就不细说了);比如我们只是在梯子服务器上安装呢?这就需要我们自己手动了.博主我呢也经常折腾linux服务器,自己的或朋友的,今天抽时间写这篇文章,把我配置SSH密钥过程中遇到的坑都一一道来,
一来是做个总结,二来是方便后人^^.不要再往坑了跳了!跳了的也能尽快出坑!(此处应有掌声 -_-|)
先来看配置SSH的步骤
大致分为以下下几步:
- 本地使用xshell软件生成公钥(不推荐linux端生成,照顾小白)
- 使用非常著名方便小巧的运维工具--lrzsz(点我传送)--来上传公钥到服务端
- 服务端常规配置(会附上详细的步骤shell操作代码)
- 本文的重点--常见的坑的排除,解决方法(附上几种出错的情况以及解决办法)
1.本地使用xshell软件生成公钥:
- 在xshell的工具栏里面找到 工具-新建用户密钥向导 如下图所示:
2.SSH登录服务器,把id_rsa_2048.pub上传到服务器上并注册公钥,配置SSH
- 上传可以参考我这篇文章 lrzsz(点我传送) ,如果安装好了lrzsz,只需要一条命即可把pub文件上传到服务器,输入:
rz
然后在弹出的窗口选择上传的文件即可,如果出现报错,暂时关闭防火墙即可.- 其实使用sftp也可以在xshell里直接传文件,但是我不常用没有做,抱歉,但是教程网上有的,搜索一下即可.
3.服务端注册公钥.pub文件到系统,并分配好权限,权限没设置好后面登录会出问题的,这就是其中的一个坑,很多人都被坑过...具体步骤如下代码 :
就是把id_rsa_2048.pub的内容替换到/root/.ssh/下: [root@test ~]# ls -a . .. id_rsa_2048.pub [root@test ~]# mkdir .ssh [root@test ~]# chmod 700 .ssh/ [root@test ~]# cd .ssh/ [root@test .ssh]# cat ../id_rsa_2048.pub > ./authorized_keys [root@test .ssh]# ls authorized_keys [root@test .ssh]# chmod 600 authorized_keys [root@test ~]# diff id_rsa_2048.pub .ssh/authorized_keys [root@test ~]#
最后的diff命令来比较两个文件,确保文件内容相同。
4.接下来配置server的ssh服务(/etc/ssh/sshd_config)只允许使用密钥登录不允许口令登录(小提示:sshd重启完先不要关闭当前的ssh链接,以防万一):
[root@test~]:# vi /etc/ssh/sshd_config #然后在vi界面用i来insert修改,找个空,回车一下,粘贴下面的代码 PasswordAuthentication no # 不允许口令登录 PubkeyAuthentication yes # 使用key登录 AuthorizedKeysFile .ssh/authorized_keys # key的名字 #然后Esc,输入冒号:wq,保存退出
service sshd restart #重启ssh服务
现在暂时不修改端口,不然修改完端口很多童鞋就直接exit了,就GG了,因为很多人的iptables规则没有设置就退出了,结果就进不去了,要是vps有控制台还好,可以通过控制台的VNC修改配置文件.要是没有就麻烦了.
这时候,xshell新开一个窗口,输入你的服务器IP,端口,默认22,然后回车链接,在弹出的对话框输入用户名,root,然后选择public key,在用户密钥里选择刚刚生成的那个,默认名字是id_rsa_2048,然后在下面输入刚刚设置的密钥密码,登录,看是否正常,如果正常登录,就OK了,然后就可以去修改端口,修改防火墙了:
修改端口,直接,vi /etc/ssh/sshd_config,增加一行,Port 3211 #端口请随意,但要记住.
然后防火墙增加一条规则允许 32211端口链接,命令大概如下,具体的请自行酌情修改:
iptables -A INPUT -p tcp --dport 3211 -j ACCEPT /*允许包从3211端口进入*/ iptables -A OUTPUT -p tcp --sport 3211 -m state --state ESTABLISHED -j ACCEPT /*允许从3211端口进入的包返回*/ service iptables save /*保存配置*/ service iptables restart /*重启iptables*/
下面说一下常见的坑(错误),如何爬出来:
这时候,请先检查存放authorized_keys的文件的权限,是否为600或者是644,如果不知道怎么看,那就直接执行下面的命令一次好了:
chmod 600 .ssh/authorized_keys 即可或者 644 也行. #600权限即-rw-------
注:执行这些命令的前提是,默认你是root账户,且在root目录下.如果不是,请自行调整用户和目录.不懂得可以留言/评论/发邮件.
然后再次登录,成功就不说了,没成功请继续往下看:
没成功就请查看登录日志,具体的命令如下(centos为例,其他的linux目录可能不一样,请注意):
cat /var/log/secure
如果出现如图所示的 xxx because account is locked :
这种有可能是用户被锁定了,于是查看状态 准备解锁用户,命令如下: pam_tally2 --user root #root为你需要登录的账号 pam_tally2 -r -u root #root为你需要登录的账号 通过pam_tally2 --user 指令发现没有锁定,都是0, [root@test~]# pam_tally2 --user root Login Failures Latest failure From root 0 [root@test~]# pam_tally2 -r -u root Login Failures Latest failure From root 0 那就有可能是sshd没开启PAM 修改/etc/ssh/sshd_config 配置后 ,再次登录测试,应该能解决问题
2.如果按照上面这些修改完还是登录不进去,并且查看日志,大概内容如下:
Mar 29 01:36:12 localhost sshd[2645]: Received disconnect from 192.123.123.123: 11: Bye Bye Mar 29 01:49:48 localhost sshd[2031]: Received signal 15; terminating. Mar 29 01:49:48 localhost sshd[2704]: Server listening on 0.0.0.0 port 22. Mar 29 01:49:48 localhost sshd[2704]: Server listening on :: port 22. Mar 29 01:50:12 localhost sshd[2707]: Received disconnect from 192.123.123.123: 0: Mar 29 01:50:43 localhost sshd[2784]: Received disconnect from 192.123.123.123: 0: Mar 29 01:52:21 localhost sshd[2812]: Received disconnect from 192.123.123.123: 0:
出错的是直接就断开了连接,并且没有任何错误提示,请检查服务器的selinux和iptables是否开启,iptables前面讲过,开放想相应端口,
如果还是连接不上,那就检查selinux, 使用下面的代码检查selinux 是否开启 :
查看SELinux状态: 1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2、getenforce ##也可以用这个命令检查 关闭SELinux: 1、临时关闭(不用重启机器): setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 2、修改配置文件需要重启机器: 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled 重启机器即可 #reboot
目前就写这么多,欢迎补充,交流!
我们下次再会.
推荐阅读: