职位:技术总监 1、精通c++(linux平台、vc++Mfc、qt)、java、php、unity3d,略懂python 2、用c++开发过嵌入式产品,用c++开发过大型银行运维产品 3、用java开发大型银行运维产品,学校教务系统 4、用php开发进销存系统(在销售中),用php开发淘宝小程序 5、用unity3d开发衣柜设计软件,在运营中
分类: LINUX
2011-08-29 22:10:05
3.1 SSHSecureShellClient密钥登陆 6
下面是密钥登陆的整个过程,包括一下几个方面:
u 1)密钥的产生
u 2)拷贝公钥到目标机
u 3)改写目标机authorized_keys文件
u 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 ~]#
注:从上面的过程可以看出,密钥是跟目标机的登录用户成对应关系的
奇
这个密钥跟密钥登陆认证无关,在没有密钥登陆认证的情况下,使用的密码登陆,这个密钥也是必须的。
客户机会把从目标机获得的密钥存储在known_hosts中,当known_hosts中的公钥与目标机的私钥不是一对的时候,ssh将拒绝登陆,这时需要更新密钥才可以登陆。
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==
ssh-keygen -y -f private_key.pem > public_key.pub
上面产生的公钥是正确的。格式如下:
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwqa75XjdEnkCYhzJobdqIdjEV4Kgv/a/xwUAAotSxeA9OdRIbgGwiXb2i5d4Y6CnSaHQyyr38BAF0YXTN7BmACKixsSevLyWPeyuWZBrGb1/FYbJvPn5i/37v4YWKI3RMCYk5G2TiUbRO1N4dJvsI3AEzOQSy+0JAXUNhn92UiLcY9LOKtvLAgSJu45+IWpLUM24XQmckvdX8sKkgBTnKyY4k+1lvfc7lKASiBrSumVXpi6788atACU653qM8lOukywLunshVuSVpPvOJfmngocT7IPBlve6u/TyHLhbp8/vYkVB7ooRfL2ymnDBTseBkoA+grXwWNbgZK3km4NHQw==
u 题外话:
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-----
一、密匙认证原理简介
密匙认证需要依靠密匙,首先创建一对密匙(包括公匙和私匙,用公匙加密的数据只能用私匙解密),把公匙放到需要远程服务器上,私钥放在客户端。这样当登录远程服务器时,客户端软件就会向服务器发出认证请求;服务器收到请求之后,先在服务器的宿主目录下寻找你的公匙,然后检查该公匙是否是合法,如果合法就用公匙加密一随机数生成所谓的“challenge”发送给客户端软件;客户端软件收到“challenge”之后就用私匙解密再把结果发送给服务器。因为用公匙加密的数据只能用私匙解密,服务器经过比较就能知道该客户连接的合法性。
二、客户端设置
1、在SSH官方网站,或本站下载SSHSecureShellClient-3.2.9.exe,用默认方式安装。
2、创建密钥对。单击生成新的公钥。
单击 Generate new... 生成蜜钥。
设置登陆时要用的Passphrase
单击 Upload...上传公钥。
3、检查密钥文件的读写属性。默认安装后密钥对存放路径为C:\Documents and Settings\Administrator\Application Data\SSH\UserKeys ,将私钥设置成仅允许属主有读写权,也可将他放在U盘上,使用时再导入,以确保密钥安全。
图5
4、在不同WIN客户机上登陆。有时需要临时在其他WIN客户机登陆服务器,这时可用上述方法安装Secure Shell Client,然后将C:\Documents and Settings\Administrator\Application Data\SSH\UserKeys目录里的文件复制到新的WIN客户机上对应目录里即可。
!!!!注意:当不用该客户机后必须将上述目录里的文件删除,以防密钥被人盗取!!!!
----------------------------------------------------------------------
三、服务端设置(服务端是FB5.3、FB6.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-su到root
10、阻止系统让用户user1用口令方式登陆FB服务器。使用vipw 命令,把要阻止用口令登陆的用户的加密口令部分替换成一个“*”符,存盘。这时系统就会更新/etc/master.passwd 文件,及用户名/口令数据库,即可达到阻止用户用口令方式登录系统。
在网上类似的文章很多,我这篇主要描述如下几个过程:
1、putty 生成 public key 和 private key
2、将 public key 分发到Linux服务器上面,使putty可以使用密钥连接到Linux
3、将private key 导出成openssh private key格式,并分发给SecureCRT使用
4、将openssh private key分发到其它两台Linux,使他们互相信任
1、putty 生成 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 key和private key的名字不对应的话,就会报找不到文件。
一切设置妥当后,就可以连到Linux了。
4、将openssh private key分发到其它两台Linux,使他们互相信任
将openssh private key上传到 .ssh 目录中,并改名为 id_rsa ,然后重启 sshd 服务。
两台服务器都要这样做。
一切配置妥当后,两台Linux之间就可以通过密钥认证了。
测试方法如下:
ssh [remotehost] date
如果不用输入密码证明OK啦。