利用SSH Key实现安全的密钥证书方式登陆


SSH作为Linux服务器的缺省登陆方式,安全性上需要进一步的增强,就我个人经验来讲,主要有以下方法:
1.禁止root用户登陆:
修改/etc/ssh/sshd_config
PermitRootLogin yes

2.仅允许某一用户(如Jack)登陆
修改/etc/ssh/sshd_config
UserAllow Jack

3.修改SSH监听端口(如7890)
修改/etc/ssh/sshd_config
Port 7890

4.通过hosts.allow仅允许指定IP(如8.8.8.8)或IP段(如8.8.8.x)通过
修改/etc/hosts.deny
sshd:all
修改/etc/hosts.allow
sshd:8.8.8.8
sshd:8.8.8.

5.禁用密码方式验证,使用密钥证书方式登陆
具体实现过程将稍后在本文中进行讲解

6.在服务器上安装OpenVPN Server,然后仅允许OpenVPN的本地IP段通过
这样每次都需要通过证书登陆到OpenVPN,才能再登陆到SSH,具体OpenVPN的搭建请参考我的这篇文章:http://heylinux.com/archives/555.html

从1到6,安全级别逐渐加强,但安全与便捷始终存在着矛盾,这一点需要大家自己进行取舍。

下面,我将对利用SSH Key实现安全的密钥证书方式登陆进行介绍,介绍中包括的客户端为 SSH Secure Shell,PuTTY,SecureCRT以及Linux终端。
一、配置OpenSSH服务端
1.修改配置文件中的以下记录
# vim /etc/ssh/sshd_config
================================
PermitEmptyPasswords no
PasswordAuthentication no

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

StrictModes no
================================

2.为用户(如jack)创建authorized_keys文件
# cd /home/jack
# mkdir .ssh
# touch .ssh/authorized_keys
# chmod 700 .ssh
# chmod 600 .ssh/authorized_keys
# chown -R jack:jack .ssh(SUSE上需要执行 chown -R jack:users .ssh)

3.重启OpenSSH服务
# /etc/init.d/sshd restart

二、配置SSH客户端

使用SSH Secure Shell客户端生成SSH Key
打开SecureCRT客户端,点击 “ Edit- Settings ”;

选择 “ Global Settings - User Authentication – Keys ”,点击 “ Generate New ”;

再出现的界面中选择 “ RSA ” 与 “ 1024 ”,点击 “ 下一步 ”;

会出现一个密码生成的界面,完成之后,点击下一步;

在界面中输入 文件名,提示信息与密码短语,点击下一步;

可以看到刚刚生成的key;

进入密钥存放路径中,用记事本打开Jack.pub公钥文件;

将文件中的密钥信息复制到新的文件中,重新编辑为可被OpenSSH接受的格式;

例如原有格式:
---- BEGIN SSH2 PUBLIC KEY ----Comment: "Jack [1024-bit rsa, Digby ]"
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCN
qnCPOXnHqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe
9/8xDIwxww9OFvRPk9KP7W1653ahj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q==
---- END SSH2 PUBLIC KEY ----

可被OpenSSH接受的格式,即“ssh-rsa 密钥 提示信息”,需要去除换行,将整个处理为单行记录:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCNqnCPOXn
HqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe9/8xDIwxww9OFvRPk9KP7W1653a
hj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q== Jack

将编辑后的内容复制下来,并粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。

此时SSH Secure Shell默认已经使用Identity文件作为本地私钥了;

使用SSH Secure Shell工具进行登陆,当出现以下提示框,说明密钥已经验证通过,输入设置的密码短语,即可登陆。

使用Linux终端生成SSH Key
使用ssh-keygen生成SSH Key,依次输入:回车,密码短语,密码短语。

然后进入密钥存放路径中,打开 id_rsa.pub 公钥文件;

将文件中的内容复制下来,粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。

使用命令行进行登陆,当出现以下提示框,说明密钥已经验证通过,输入设置的密码短语,即可登陆。

使用PuTTY客户端生成SSH Key
打开PUTTYGEN.exe程序,点击Generator,在出现的界面中滑动鼠标来输入随机数据,进入到如下界面。

执行以下操作:
在Key comment:输入key的提示信息;
在Key passphrase:输入key的密码短语,在Confirm passphrase:再次输入key的密码短语;
在Type of key to generate:选择SSH-2 RSA;
在Number of bits in a generated key:输入1024;

点击Save public key保存 公钥 到本地,命名为ssh-rsa.pub;
点击Save private key保存 私钥 到本地,命名为ssh-rsa.ppk。

将最上方的Public key for pasting into OpenSSH authorized_keys file:的文本框中的内容复制下来,并粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。

使用PuTTY,在Connection-SSH-Auth中的Private key file for authentication中选择刚生成的ssh-rsa.ppk文件。

使用PuTTY进行登陆,当出现以下提示框,则说明密钥已经验证通过,输入开始设置的密码短语,即可登陆。

使用SecureCRT客户端生成SSH Key
打开SecureCRT客户端,点击 “ Tools - Create Public key ”;

在陆续出现的界面中,执行以下操作:
选择 下一步,然后选择密钥类型为“ RSA ”;

输入密码短语与提示信息;

输入密钥长度(位):1024;

选择 “ OpenSSH Key format ” 并确认密钥存放路径,点击 完成;

进入密钥存放路径中,用记事本打开Identity.pub公钥文件;

将文件中的内容复制下来,粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。

如果使用的SecureCRT客户端版本比较低,不能够选择“OpenSSH Key format”格式来存储密钥,那么就需要将文件中的密钥信息复制到新的文件中,重新编辑为可被OpenSSH接受的格式;

例如原有格式:
---- BEGIN SSH2 PUBLIC KEY ----
Subject: Digby
Comment: "Jack"
ModBitSize: 1024
AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCN
qnCPOXnHqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe
9/8xDIwxww9OFvRPk9KP7W1653ahj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q==
---- END SSH2 PUBLIC KEY ----

可被OpenSSH接受的格式,即“ssh-rsa 密钥 提示信息”,需要去除换行,将整个处理为单行记录:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSaMbbAmwE/b0NaqGN/9yq56UEYzQ0PEUCgTCNqnCPOXn
HqqH0H7G/77MXZ0j9ekzL7arLzjcZBXpYSrg7ueSj+6yIsGnlH8g0k1u/uqTe9/8xDIwxww9OFvRPk9KP7W1653a
hj9w/gOxYu66+sT5tt4lu643zPIOO7Fm3cjuy7Q== Jack

将编辑后的内容复制下来,粘贴到服务器中需要通过密钥登陆的用户(如jack)的 ~/.ssh/authorized_keys 文件中。

此时SecureCRT默认已经使用Identity文件作为本地私钥了,如果需要指定私钥文件,需要在 “Connection - SSH2 - Authentication(PublicKey) - Properties ”中进行设置;

使用SecureCRT工具进行登陆,当出现以下提示框,则说明密钥已经验证通过,输入开始设置的密码短语,即可登陆。

三、注意事项
在生成了key之后,一定要保存好生成的两个证书文件,它们分别代表了 公钥 和 私钥;
其中公钥用于添加到服务器端用来识别私钥,私钥用于服务器认证,如果不单独复制出来好好的保存的话,极有可能在重装系统或SSH客户端之后,造成两个证书文件的丢失,也就再也无法登陆服务器了。
另外,为证书创建一个密码短语也是非常有必要的,因为如果一旦证书泄露了,且没有密码短语的保护,那么拿到证书的人就可以直接登陆到服务器中。

  1. No comments yet.
(will not be published)
*