«

centos开启ssh密钥登录总结

时间:2017-3-29 16:39     作者:admin     分类: Linux



centos开启SSH密钥登录相信大家都会吧,而且很多的一键脚本都会配备,比如wdlinux面板的一件安装包都会配备而且支持自定义修改SSH端口,和一键生成密钥,很方便的,但是我们有时候没有必要安装这些一键脚本(比如内存小,不是用来做web服务的等等原因就不细说了);比如我们只是在梯子服务器上安装呢?这就需要我们自己手动了.博主我呢也经常折腾linux服务器,自己的或朋友的,今天抽时间写这篇文章,把我配置SSH密钥过程中遇到的坑都一一道来,

一来是做个总结,二来是方便后人^^.不要再往坑了跳了!跳了的也能尽快出坑!(此处应有掌声 -_-|)

先来看配置SSH的步骤

大致分为以下下几步:

  • 本地使用xshell软件生成公钥(不推荐linux端生成,照顾小白)
  • 使用非常著名方便小巧的运维工具--lrzsz(点我传送)--来上传公钥到服务端
  • 服务端常规配置(会附上详细的步骤shell操作代码)
  • 本文的重点--常见的坑的排除,解决方法(附上几种出错的情况以及解决办法)

1.本地使用xshell软件生成公钥:

  • 在xshell的工具栏里面找到 工具-新建用户密钥向导 如下图所示: 


  • 新建用户密钥生成向导.jpg


  • *密钥类型推荐使用RSA,密钥长度为2048的,即软件推荐的默认长度. 建议使用2048位密钥长度.jpg


  • 然后下一步,等待自动生成公钥对,公钥对生成.jpg
  • 然后下一步,给用户密钥设置一个密码,如下图所示,设置密码,即使别人拿到你得密钥也没法用,双重保险. 密钥加密.jpg


  • 然后点击下一步到公钥注册界面,选择公钥格式: SSH2-OpenSSH(因为现在大多数的linux的SSH都支持2.0保护方式,而且更保险.),然后,如下图所示保存为文件,在弹出的窗口,选择一个地方保存公钥 .pub 文件, 默认是id_rsa_2048.pub,方便自己查找的一个地方,比如桌面.导出公钥.jpg

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*/

下面说一下常见的坑(错误),如何爬出来:

  1. 配置完,使用密钥登录时,提示:所选用户密钥未在远程主机上注册.请再试一次.所选用户密钥未在远程主机上注册.请再试一次..jpg

这时候,请先检查存放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: 

出错的是直接就断开了连接,并且没有任何错误提示,请检查服务器的selinuxiptables是否开启,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

目前就写这么多,欢迎补充,交流!

我们下次再会.

标签: shell 分享 网络安全 Linux 密钥

版权所有:Mrxn's Blog
文章标题:centos开启ssh密钥登录总结
除非注明,文章均为 Mrxn's Blog 原创,请勿用于任何商业用途,转载请注明作者和出处 Mrxn's Blog

扫描二维码,在手机上阅读