利用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)先添加一个维护账号:msa

2)然后su - msa

3)ssh-keygen -t rsa
指定密钥路径和输入口令之后,即在/home/msa/.ssh/中生成公钥和私钥:id_rsa id_rsa.pub

4)cat id_rsa.pub >> authorized_keys
至于为什么要生成这个文件,因为sshd_config里面写的就是这个。
然后chmod 400 authorized_keys,稍微保护一下。

5)用psftp把把id_rsa拉回本地,然后把服务器上的id_rsa和id_rsa.pub干掉

6)配置/etc/ssh/sshd_config
Protocol 2
ServerKeyBits 1024
PermitRootLogin no  #禁止root登录而已,与本文无关,加上安全些

#以下三行没什么要改的,把默认的#注释去掉就行了
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys

PasswordAuthentication no
PermitEmptyPasswords no

7)重启sshd
/sbin/service sshd restart

8)转换证书格式,迁就一下putty
运行puttygen,转换id_rsa为putty的ppk证书文件

9)配置putty登录
在connection--SSH--Auth中,点击Browse,选择刚刚转换好的证书。
然后在connection-Data填写一下auto login username,例如我的是msa
在session中填写服务器的IP地址,高兴的话可以save一下

10)解决一点小麻烦
做到这一步的时候,很可能会空欢喜一场,此时就兴冲冲的登录,没准登不进去:
No supported authentication methods available

这时可以修改一下sshd_config,把
PasswordAuthentication no临时改为:
PasswordAuthentication yes 并重启sshd

这样可以登录成功,退出登录后,再重新把PasswordAuthentication的值改为no,重启sshd。
以后登录就会正常的询问你密钥文件的密码了,答对了就能高高兴兴的登进去。

至于psftp命令,加上个-i参数,指定证书文件路径就行了。

---------------------------------------------------------------------------------------------------






转载于:https://my.oschina.net/u/3484168/blog/899823

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值