注册

最新文章 | 栏目列表 | 文章搜索

所有栏目 - 网络类
SSH服务器密钥验证
从开始使用linux到现在,所有的服务器我都是用“用户名+密码”方式的验证。 只要知道我的服务器用户名和密码,大家就都可ssh上去瞎搞。几乎每次我例行公事检查所有远程服务器的时候,看到日志里都有一堆一堆的用户名密码错误提示,意思也就是有人在使用brute force方式攻击服务器。以前为了安全,只有拒绝root用户直接登录,把我的用户密码设得超长,这样也就算稍微安全了点。
关掉ssh是不可能的,但服务器24小时开机,总有一天会被别人穷举到密码的,为了把安全级别提高到更高地步,今天将服务器上ssh服务验证方式更改为密钥验证。 一来解决了暴力破解的安全漏洞,二来简化了我管理N多服务器输入密码的颇烦之处(N多服务器不可能用一个密码吧? 反正我是不会那样滴!)。
      ssh的验证方式有键盘交互、主机验证和密钥验证,默认前两种都可用。我的简介就是如此简单,预知详情,请“自己看ssh的manual”grin
      今天有空,就将整个操作流程弄了个图解,详细步骤如下:
1、首先创建rsa或dsa密钥对:  
$ ssh-keygen
$ ssh-keygen -t dsa

bpxyz@gateway ~/.ssh $ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/bpxyz/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/bpxyz/.ssh/id_rsa.
Your public key has been saved in /home/bpxyz/.ssh/id_rsa.pub.
The key fingerprint is:
10:c2:02:4a:1a:62:df:d3:ca:a9:24:d9:26:d3:fc:98 bpxyz@gateway

提示“Enter file in which to save the key (/root/.ssh/id_rsa):”是指生成的密钥对存在什么地方叫什么名字,默认就行。
提示“Enter passphrase (empty for no passphrase):”是指是否使用密码来保护生成的密钥对里的私钥,如果不使用密码保护,任何人得到私钥都可以直接使用他。
在当前用户家目录的.ssh目录里生成两个文件:id_rsa和id_rsa.pub(或者是id_dsa和id_dsa.pub),前者是私钥,后者是公钥。 公钥需要放到要登录的远程服务器上,私钥自己保留。
2、将公钥拷贝到远程服务器上,并改名为authorized_keys
bpxyz@gateway ~/.ssh $ scp id_rsa.pub bpxyz@192.168.6.3:~/.ssh/authorized_keys

为了安全,登录到远程服务器,修改公钥的权限(该步骤为可选)
bpxyz@gateway ~/.ssh $ chmod 600 authorized_keys

至此我们就已经可以使用密钥来登录远程服务器而不需要输入用户密码了!
但如果在生成密钥对的时候使用了密码保护密钥,那在使用私钥的时候,需要输入密钥的保护密码:
Enter passphrase for key '/root/.ssh/id_rsa':  
但是直接使用系统用户名和密码仍然可以登录系统,那我们来更改远程服务器sshd的配置,拒绝使用系统用户名和密码登录。
3、更改远程服务器ssh配置。我的实例是使用openssh,所以更改/etc/ssh/sshd_config中如下参数
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePam no

意思即不使用密码验证方式和挑战式验证。

OK,使用密钥来验证用户的sshd服务器就配置好了。 以上方式只适合于linux到linux,很多人估计跟我一样,客户机使用putty或其他win版的ssh客户端,他们的配置稍微不一样点点,但原理都一样,以下简介使用putty实现密钥对验证用户的步骤。

1、下载完整的putty软件包,我们使用软件包中的puttygen.exe生成密钥对。运行puttygen.exe,
点击在新窗口中浏览此图片
2、选择要生成的密钥对的类型和长度,点击Generate,然后将鼠标放到“key”框中随意移动(产生随机数据),待到第一次的进度条走完后,生成密钥对。
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
3、生成密钥对后,可以修改密钥对的“Key comment”(密钥说明)、“Key passphrase”(密钥的使用密码)。 一切ok后,点击“Save public key”和"Save private key"分别保存公钥和私钥。公钥放到远程sshd服务器上,私钥供putty连接远程sshd服务器时使用。
使用任意方式将刚刚生成的公钥拷贝至远程sshd服务器上对应用户家目录里的.ssh目录内,改名为authorized_keys,同样最好是设置权限为600。

4、运行putty,在左侧树状分类目录里选择“Data”,在右侧窗口中“Auto-login username”处填写自动登录用户名
点击在新窗口中浏览此图片
5、再在左侧树状分类目录里选择“Auth”,在右侧“Private key file for authentication:”处填写刚刚使用puttygen.exe生成的私钥,
点击在新窗口中浏览此图片
6、登录远程服务器,你会发现没输用户密码我们就已经登录到远程sshd服务器了(当然如果私钥受密码保护,还要输入私钥的使用密码)。
点击在新窗口中浏览此图片

怎么样?还算简单噻?
现在是不是觉得还是不够方便? 每次使用有密码保护的私钥的时候,要输入私钥的保护密码,跟输入系统用户密码没太大差别,别急,putty想到这点了!
运行putty软件包里的“pageant.exe”,
这是私钥代理,帮你缓存你输入过的私钥密码,只要不退出pageant,就不需要重复输入私钥的保护密码,方便了噻。
pageant的使用方法很简单,点击pageant的图标,出现如下窗体:
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片

点击“Add key”,将你要使用的密钥导入,然后输入密钥的保护密码就ok了,
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
以后再使用对应的私钥都不需重复输入私钥密码了。


总结:
1、ssh使用的密钥有两种 rsa和dsa,对应两种不同的加密算法,前者弱点,后者要优秀点,所以dsa被使用在ssh2版本中。
2、密钥对在客户机上生成和在服务器上生成是一样的。
3、服务端验证用户的公钥文件名可以通过更改/ets/ssh/sshd_config里的AuthorizedKeysFile关键字来更改,默认为.ssh/authorized_keys
4、客户端用于验证的私钥文件名可以通过更改/etc/ssh/ssd_config里的IdentityFile关键字来更改,
默认为:~/.ssh/identity~/.ssh/id_rsa~/.ssh/id_dsa
5、openssh生成的私钥不能直接给putty使用,用putty包里的puttygen转换一下即可。
 
Publication dates:2008年9月2日 - Writer:技术 部
上一页 | 下一页
Comment
目前还没有评论. 欢迎您第一个发表评论!
点击 此处 以发表评论。
 

重庆中典计算机职业培训学院    2006    版权所有    未经授权禁止复制或建立镜像
咨询电话:023-65353888    咨询QQ:139538889   备案序号:渝ICP备05010489号
地址:重庆市沙坪坝区沙杨路1号(南开中学旁,距重庆大学500米)
copyright  ©  2006  Chongqing  Zhongdian  Computer  Institute