清水

最小的善行胜过最大善念

CentOS 7配置SSH基于密钥对验证登录

  对于SSH一直以来都只是知其名而不知其身,就知道有这么一个东西用于远程登录而已。近来玩Linux和Octopress才用得上它,通过简单学习,将用到的地方做个备忘。

  SSH为Secure Shell的缩写,SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。Linux一般自带的是OpenSSH,可以用 ssh -V 查看当前版本。

[root@localhost ~]# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013

  用SSH登录到远程主机,有两种认证方式,一种是基于口令的安全验证,另一种是基于密匙的安全验证。可以通过修改 /etc/ssh/sshd_config 这个文件对ssh服务的一些行为进行配置。

  当第一次使用SSH登录远程主机时,会出现没有找到主机密钥的提示信息。输入"yes"后,系统会将远程主机的密钥加入到你的主目录下的 .ssh/known_hosts 文件里(我用的是Mac OS X),这样你就可以继续操作了。因为远程主机的密钥已经加入到ssh客户端的已知主机列表中,当你第二次登陆远程主机时,只需要你输入远程主机的登录密码即可。如果远程主机的密钥发生改变,将会看到一些警告信息。在输入“yes”之前呢,最佳的选择或许是联系系统管理员来分析为什么会出现主机验证码改变的信息,核对主机验证码是否正确。

  由于平时经常要连到远程服务器进行维护,每次都要输入密码也是挺烦的,下面介绍如何开启基于密匙的安全验证登录远程主机。需求是:保留基于口令的安全验证登录,同时禁止root登录ssh,只能用普通用户登录。

  首先,先创建一个普通用户pcvc:

[root@localhost ~]# useradd -r -m -d /home/pcvc -s /bin/bash pcvc
[root@localhost ~]# passwd pcvc
[root@localhost ~]# 输入pcvc的密码

  用 ssh-keygen 生成密钥对:

[pcvc@localhost ~]$ ssh-keygen -t rsa

  可以根据提示按自己需求填写相关值,也可按默认一路按回车键。默认情况下会在 ~/.ssh 目录下生成两个文件:

[pcvc@localhost ~]$ ll .ssh
总用量 8
-rw-------. 1 pcvc pcvc 1679 8月  10 22:58 id_rsa
-rw-r--r--. 1 pcvc pcvc  409 8月  10 22:58 id_rsa.pub

  id_rsa 是私钥,id_rsa.pub 是公钥。注意生成的私钥文件的默认权限是rw——-,即600(确保他人不能查看)。要将 id_rsa.pub 的内容添加到远程主机的用户主目录下的 .ssh/authorized_keys 文件里,该文件一行一个公钥。

  接下来根据上面的需求修改ssh的配置文件 /etc/ssh/sshd_config

1
2
3
PubkeyAuthentication yes  # 启用基于密匙的安全验证
PasswordAuthentication yes  # 启用基于口令的安全验证
PermitRootLogin no  # 禁止 root 登录 ssh

  修改一下相关目录、文件的权限

[root@localhost ~]# chmod 700 /home/pcvc
[root@localhost ~]# chmod 700 /home/pcvc/.ssh
[root@localhost ~]# chmod 400 /home/pcvc/.ssh/authorized_keys

  systemctl restart sshd.service 重启ssh服务,这时就可以在客户端通过 ssh pcvc@192.168.0.117 登录远程主机了。

参考

简单使用ssh密钥认证
CentOS 6.2 构建SSH 密钥对验证登录
ssh使用公钥授权不通过的问题解决
CenOS6.3 ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).解决