Chinaunix首页 | 论坛 | 博客
  • 博客访问: 679182
  • 博文数量: 85
  • 博客积分: 1797
  • 博客等级: 上尉
  • 技术积分: 1238
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 08:53
个人简介

职位:技术总监 1、精通c++(linux平台、vc++Mfc、qt)、java、php、unity3d,略懂python 2、用c++开发过嵌入式产品,用c++开发过大型银行运维产品 3、用java开发大型银行运维产品,学校教务系统 4、用php开发进销存系统(在销售中),用php开发淘宝小程序 5、用unity3d开发衣柜设计软件,在运营中

文章分类

全部博文(85)

分类: LINUX

2011-08-29 22:10:05

目   录

1. 密钥认证登陆 3

1.1 Linux的密钥登陆过程 3

2. known_hosts 4

2.1 密钥扫描 4

2.2 私钥产生公钥命令 5

3. 附录 6

3.1 SSHSecureShellClient密钥登陆 6

3.2 Putty密钥登陆 0

1. 密钥认证登陆

1.1 Linux的密钥登陆过程

下面是密钥登陆的整个过程,包括一下几个方面:

1)密钥的产生

2)拷贝公钥到目标机

3)改写目标机authorized_keys文件

4)使用密钥登陆目标机

具体指令如下:

1)密钥的产生

[root@localhost .ssh]# ssh-keygen -t rsa  

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): rsa_my

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in rsa_my.

Your public key has been saved in rsa_my.pub.

The key fingerprint is:

30:62:26:30:59:f1:33:aa:31:15:71:c1:91:2f:4d:46 root@localhost.localdomain

[root@localhost .ssh]# ls

1  2.pub  authorized_keys  known_hosts  rsa_my.pub

2  3.pub  id_rsa_1.pub     rsa_my

2)拷贝公钥到目标机

[root@localhost .ssh]# scp rsa_my.pub   root@192.168.1.97:~/.ssh

root@192.168.1.97's password: 

rsa_my.pub                                   100%  408     0.4KB/s   00:00    

[root@localhost .ssh]# ssh root@192.168.1.97

root@192.168.1.97's password: 

Last login: Wed Sep 29 10:36:11 2010 from 192.168.1.96

[root@localhost ~]# ls

anaconda-ks.cfg  geng         install.log.syslog

Desktop          install.log  sshd_config.bak

[root@localhost ~]# cd .ssh

[root@localhost .ssh]# ls

authorized_keys  rsa_my.pub

3)改写目标机authorized_keys文件

[root@localhost .ssh]# cat rsa_my.pub >> authorized_keys 

[root@localhost .ssh]# logout

Connection to 192.168.1.97 closed.

[root@localhost .ssh]# ssh root@192.168.1.97

root@192.168.1.97's password: 

4)使用密钥登陆目标机

[root@localhost .ssh]# ssh -i 

Last login: Wed Sep 29 16:51:48 2010 from 192.168.1.96

[root@localhost ~]#

注:从上面的过程可以看出,密钥是跟目标机的登录用户成对应关系的

2. known_hosts中密钥

这个密钥跟密钥登陆认证无关,在没有密钥登陆认证的情况下,使用的密码登陆,这个密钥也是必须的。

客户机会把从目标机获得的密钥存储在known_hosts中,当known_hosts中的公钥与目标机的私钥不是一对的时候,ssh将拒绝登陆,这时需要更新密钥才可以登陆。

2.1 密钥扫描

ssh-keyscan -t  rsa  192.168.1.97

-t 指定参数类型

192.168.1.97   目标机ip

扫描结果如下:

[root@localhost .ssh]# ssh-keyscan -t rsa  192.168.1.97

# 192.168.1.97 SSH-2.0-OpenSSH_4.3

192.168.1.97 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxLHvCKphQOXgXrur8iO3iGz4anUTma1BnZNUj0LCrY1tkQFLaKKPAEUlwLpRboPgtCppHq1HNkqAD05oWAUig5LPCL0ZORFL37QfVZMLPoHd1DteL430Ix9DRnBAr9I+HTqual768aFmgXYPNXN4VoggnFHM1ZK3fYBFtDZ2WQTnuu/c9W5mRH8X6tkMgHPKMu1xFyd/6b3T3r46sclRZO2I4aA2Wh/ad6JyZgtSXda8gVAtKS7ZCGfY2R1LYz2aaVyKW5TKyB9/KMYGgcLjFAIptETuZQJvajwj8j+gVO7R1UhLB2FJSQXhs62A0iVmnDvoVVzRKOpcN13vSk/FCw==

2.2 私钥产生公钥命令

ssh-keygen -y -f private_key.pem > public_key.pub

上面产生的公钥是正确的。格式如下:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwqa75XjdEnkCYhzJobdqIdjEV4Kgv/a/xwUAAotSxeA9OdRIbgGwiXb2i5d4Y6CnSaHQyyr38BAF0YXTN7BmACKixsSevLyWPeyuWZBrGb1/FYbJvPn5i/37v4YWKI3RMCYk5G2TiUbRO1N4dJvsI3AEzOQSy+0JAXUNhn92UiLcY9LOKtvLAgSJu45+IWpLUM24XQmckvdX8sKkgBTnKyY4k+1lvfc7lKASiBrSumVXpi6788atACU653qM8lOukywLunshVuSVpPvOJfmngocT7IPBlve6u/TyHLhbp8/vYkVB7ooRfL2ymnDBTseBkoA+grXwWNbgZK3km4NHQw== 

题外话:

       Openssl也有种产生由私钥产生公钥的方法:

openssl rsa -in key.pem -pubout -out pubkey.pem

但是产生公钥格式与上面的不一致,格式如下:
-----BEGIN PUBLIC KEY-----

MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAwqa75XjdEnkCYhzJobdq

IdjEV4Kgv/a/xwUAAotSxeA9OdRIbgGwiXb2i5d4Y6CnSaHQyyr38BAF0YXTN7Bm

ACKixsSevLyWPeyuWZBrGb1/FYbJvPn5i/37v4YWKI3RMCYk5G2TiUbRO1N4dJvs

I3AEzOQSy+0JAXUNhn92UiLcY9LOKtvLAgSJu45+IWpLUM24XQmckvdX8sKkgBTn

KyY4k+1lvfc7lKASiBrSumVXpi6788atACU653qM8lOukywLunshVuSVpPvOJfmn

gocT7IPBlve6u/TyHLhbp8/vYkVB7ooRfL2ymnDBTseBkoA+grXwWNbgZK3km4NH

QwIBIw==

-----END PUBLIC KEY-----

3. 附录

3.1 SSHSecureShellClient密钥登陆

一、密匙认证原理简介 

  密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和私匙,用公匙加密的数据只能用私匙解密),把公匙放到需要远程服务器上,私钥放在客户端。这样当登录远程服务器时,客户端软件就会向服务器发出认证请求;服务器收到请求之后,先在服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数生成所谓的“challenge”发送给客户端软件;客户端软件收到“challenge”之后就用私匙解密再把结果发送给服务器。因为用公匙加密的数据只能用私匙解密,服务器经过比较就能知道该客户连接的合法性。 

二、客户端设置 

  1、在SSH官方网站,或本站下载SSHSecureShellClient-3.2.9.exe,用默认方式安装。 

2、创建密钥对。单击生成新的公钥。

单击 Generate new... 生成蜜钥。

设置登陆时要用的Passphrase

单击 Upload...上传公钥。

3、检查密钥文件的读写属性。默认安装后密钥对存放路径为C:Documents and SettingsAdministratorApplication DataSSHUserKeys 将私钥设置成仅允许属主有读写权,也可将他放在U盘上,使用时再导入,以确保密钥安全。 

4、在不同WIN客户机上登陆。有时需要临时在其他WIN客户机登陆服务器,这时可用上述方法安装Secure Shell Client,然后将C:Documents and SettingsAdministratorApplication DataSSHUserKeys目录里的文件复制到新的WIN客户机上对应目录里即可。 

  !!!!注意:当不用该客户机后必须将上述目录里的文件删除,以防密钥被人盗取!!!!

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

三、服务端设置(服务端是FB5.3FB6.0用最小化安装后自带的Openssh) 

  1、用vi编辑/etc/rc.conf,确保有以下行: 

  sshd_enable="yes 

  2、在FB服务器添加新用户user1,并指定他属于whell组。 

  3、用vi编辑/etc/ssh/sshd_config,将FB服务器设置成密码验证方式。/etc/ssh/sshd_config文件内容有以下行: 

  Port 22 

  ListenAddress 10.1.1.1 

  PasswordAuthentication yes 

  ChallengeResponseAuthentication yes 

  UsePAM yes 

  UseDNS no 

4、重启SSHD服务。 

  #/etc/rc.d/sshd restart 

5、在WINXP上运行SSH Secure Shell Client-3.2.9客户端,用密码方式登陆FB SSHD服务器,将前面创建的公钥文件12.pub上传到用户家目录,即: 

  /usr/home/user1/.ssh/12.pub 

6、在FB服务器上进入用户的.ssh目录下,把SSH Secure Shell Client格式的公钥转换成Openssl格式的公钥。 

  #cd /usr/home/user1/.ssh/ 

  #ssh-keygen -X -f 12.pub >> authorized_keys ;转换格式并将公钥导入到authorized_keys文件中 

  #chmod 0640 authorized_key ;设置权限,使该文件仅允许属主读写 

  #rm 12.pub ;删除上传的公钥 

7、用vi编辑/etc/ssh/sshd_config,将FB服务器设置成密钥验证方式。 

  Protocol 2 

  PasswordAuthentication no 

  PermitRootLogin no 

  ChallengeResponseAuthentication no 

  PubkeyAuthentication yes    

  AuthorizedKeysFile .ssh/authorized_keys 

8、重启SSHD服务器 

  #/etc/rc.d/sshd restart 

9、在WINXP上运行SSH Secure Shell Client-3.2.9客户端,用密钥方式登陆FB SSHD服务器。 

1-登陆 

2-输入通行密码 

3-suroot 

10、阻止系统让用户user1用口令方式登陆FB服务器。使用vipw 命令,把要阻止用口令登陆的用户的加密口令部分替换成一个“*”符,存盘。这时系统就会更新/etc/master.passwd 文件,及用户名/口令数据库,即可达到阻止用户用口令方式登录系统。

3.2 Putty密钥登陆

在网上类似的文章很多,我这篇主要描述如下几个过程:

1putty 生成 public key 和 private key 

2、将 public key 分发到Linux服务器上面,使putty可以使用密钥连接到Linux

3、将private key 导出成openssh private key格式,并分发给SecureCRT使用

4、将openssh private key分发到其它两台Linux,使他们互相信任

 

1putty 生成 public key 和 private key 

下载putty,这个不用说了吧。打开 PUTTYGEN.EXE 

选好参数,点击 Generate ,然后不断晃动鼠标。

再分别点 Save public key 和 Save private key 将 public key 和 private key 保存到硬盘中。

 

2、将 public key 分发到Linux服务器上面,使putty可以使用密钥连接到Linux

notepad打开public key,然后将base64那几行修改成一行,把头和尾巴的注释去掉。

---- BEGIN SSH2 PUBLIC KEY ----

Comment: "nhinc-rsa-key"

AAAAB3NzaC1yc2EAAAABJQAAAIEAiCezXwYbY/gVl+B5JiPoEisVddQVrYnRWgiK

rxgMBGL0H0ShWkmegyfvPW8OUVEhWLCHseYwzoK2KeIV7nvKGd+N/3VmB7huuYMT

CLXJSISrxQb/wUl+/946PhGFZSncHKKbRfbn6gGJiMTZy+OX0seddoZZ8mskVkTL

Kpydgd0=

---- END SSH2 PUBLIC KEY ----

修改成这样:

AAAAB3NzaC1yc2EAAAABJQAAAIEAiCezXwYbY/gVl+B5Ji................

然后,把public key传到服务器上面,放在/root/.ssh/目录中,然后执行

cat [public key file name] >> authorized_keys

然后修改 authorized_keys ,在刚刚添加的那段Base64字符串前面加上 ssh-rsa ,记住后面加个空格分开,大致如下:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiCezXwYbY/gVl+B5Ji................

重启一下 sshd 服务

service sshd restart 

下一步配置putty使用密钥登陆Linux,先配置登陆名:

在配置private key所在的目录:

当然连接服务期的地址,这些就不说了。

一切设置好之后,就可以连接到Linux了。

 

3、将private key 导出成openssh private key格式,并分发给SecureCRT使用

再次打开PUTTYGEN.EXE

点击 Load , 将刚才生成private key 文件Load进来。

然后,另存为 openssh private key 

public key 和 openssh private key 的名字修改为如下对应格式:

public key  :  [openssh private key name].pub

private key : [openssh private key name]

这个界面中点击 属性 

在这个界面中,填入openssh private key的路径,如果上面public keyprivate key的名字不对应的话,就会报找不到文件。

一切设置妥当后,就可以连到Linux了。

 

4、将openssh private key分发到其它两台Linux,使他们互相信任

openssh private key上传到 .ssh 目录中,并改名为 id_rsa ,然后重启 sshd 服务。

两台服务器都要这样做。

一切配置妥当后,两台Linux之间就可以通过密钥认证了。

测试方法如下:

ssh [remotehost] date  

如果不用输入密码证明OK啦。

阅读(20783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~