使用SSH证书远程登陆你的服务器

从某种角度讲,SSH证书登陆远程服务器要安全很多,但并不绝对安全。不过,它很方便,可以让你每次无需使用密码,就能快速ssh连接到你的服务器上面去,同时,虽然没有使用密码,却不是采用缓存密码的方式,而是通过一个公钥和私钥来完成这个过程。那么怎么来实现呢?我们这篇文章详细阐述这个操作。

1.生成公钥私钥

Linux系统默认已经集成了ssh工具,因此我们只需要使用一个简单的命令即可完成公钥私钥的生成。

$ cd ~
$ ssh-keygen -t rsa
$ cd .ssh
$ ls

这样就可以了,你可以看到.ssh目录下已经有了id_rsa、id_rsa.pub两个密钥文件。

2.将公钥上传到远程服务器

我们要登陆远程服务器,那么把我们的公钥交给远程服务器,一旦交付之后,今后我们远程登陆时,服务器就可以通过这个公钥识别本机,从而无需密码即可完成登陆。在本机上执行如下操作:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@xxx.xx.xxx.xx

执行之后,会让你输入一次远程服务器root登陆的密码,输入即可。

通过这一步,我们将公钥加入到服务器的认证列表中,被服务器“记录在案”。

但是我在一次执行该操作的时候,发现服务器上得到的结果中出现了乱码。为了保险起见,我的建议是,直接打开id_rsa.pub文件,复制里面的内容,然后登陆到服务器上面,进入~/.ssh/,打开authorized_keys,把内容拷贝到里面。

3.到服务器上调整配置

执行上面的步骤之后,我们还不是很放心,我们通过原始的ssh方法登陆到远程服务器上面去,并对服务器上的一些配置进行调整。

$ ssh root@xxx.xx.xxx.xx
root@xxx >  ### 登陆到服务器上了,当前目录为/root,也就是root的~
$ cd .ssh      ### 注意,如果服务器是裸机,应该是不存在.ssh目录的,你需要自己创建.ssh目录,当然,执行上面的步骤后,会自动创建.ssh目录
$ chmod 600 authorized_keys        ### 一些博客说要执行这个步骤,我们就执行吧
$ vi authorized_keys                        ### 你可以和你本地id_rsa.pub进行对比,看看authorized_keys中是否已经存在和你的公钥一模一样的记录

通过上面这个步骤进行确认,确认之后,我们修改服务器的一些配置。

$ vi /etc/ssh/sshd_config

通过这条命令,打开sshd的配置文件,进行配置,修改下面的几个值:

# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no

# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

注意上面红色字,这几个配置项,决定了你是否可以用ssh的key file进行登陆。这是必须要改的,改完之后,重启sshd服务:

$ service sshd restart

OK,服务器端已经完成了,不用再管了。

4.本地ssh登陆配置

除了服务器要配置外,还要对本地进行配置,只有经过本步骤配置后,ssh登陆时,才会主动使用证书进行登陆,否则还是会提示输入密码。怎么配置呢,其实很简单:

$ sudo vi /etc/ssh/ssh_config

打开本地的ssh配置文件,通过搜索,找到IdentityFile,你会发现是被注释掉的,我们打开注释,并且增加一行,结果如下:

IdentityFile ~/.ssh/id_rsa
IdentityFile /home/yourname/.ssh/id_rsa

保存,并重启本地的ssh。OK,本地的ssh也配置好了。

现在,请测试使用ssh root@xxx.xx.xxx.xx进行登陆。

2015-11-09