1. PublicKey认证基本原理
Public Key(非对称,asymmetric)认证使用一对相关联的Key Pair(一个公钥Public Key,一个私钥Private Key)来代替传统的密码(或我们常说的口令,Password)。顾名思义,PublicKey是用来公开的,可以将其放到SSH服务器自己的帐号中,而PrivateKey只能由自己保管,用来证明自己身份。
使用PublicKey加密过的数据只有用与之相对应的PrivateKey才能解密。这样在认证的过程中,PublicKey拥有者便可以通过PublicKey加密一些东西发送给对应的PrivateKey拥有者,如果在通信的双方都拥有对方的PublicKey(自己的PrivateKey只由自己保管),那么就可以通过这对Key Pair来安全地交换信息,从而实现相互认证。在使用中,我们把自己的PublicKey放在通过安全渠道放到服务器上,PrivateKey自己保管(用一个口令把PrivateKey加密后存放),而服务器的PublicKey一般会在第一次登录服务器的时候存放到本地客户端(严格地说来服务器的PublicKey也应该通过安全渠道放到本地客户端,以防止别人用他自己的PublicKey来欺骗登录)。
2. Public Key认证相对于其它SSH认证的优点
在众多SSH登录认证中,传统的单口令(Password)认证用得比较多,所以在这里我们主要对比一下SSH认证中的口令(Password)认证和PublicKey认证的区别。
a. 基于主机IP(rhost)的认证:对于某个主机(IP)信任并让之登录,这种认证容易受到IP欺骗攻击。 b. Kerberos认证:一个大型的基于域的认证,这种认证安全性高,但是太大、太复杂不方便部署。
c. PAM认证:类似于传统的密码认证,是绝大多数Unix/Linux系统自带的一个认证和记帐的模块,它的功能比较复杂,配置起来比较麻烦。而且,容易由于配置失误而引起安全问题。 汗维
d. 传统的Unix/Linux口令(或密码Password)认证:在客户端直接输入帐号密码,然后让SSH加密传输到服务器端验证。这种认证方式有着如下明显的缺点:
1)为了确保密码安全,密码必须很长很复杂,但是这样的密码很难记忆;
2)对于自己所拥有的每个帐号,为了安全,不同的帐号都要设置不同的密码,管理起来很不方便;
3) 对于默认帐号,默认密码,例如装机时用的帐号,如果一时疏忽没有改密码,被其它不怀好意的人扫描到帐号和密码,可能会造成安全漏洞;
4)如果远程主机已经被攻击,即使使用SSH安全通道进行保护,在网络上发送的密码在到达远程主机时也可能被截获;
5)对于每个帐号的修改都要人工登录(为了安全,不能把Password放到脚本里),随着服务器数量增多,这项工作会变得十分烦琐。
3. Public Key配置
使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)
然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了
步骤如下:
本地
先要在本地生成一个 rsa 的公共 key .然后 copy 到远程你要认证的服务器创建 key
ssh-keygen -t rsa
这里会提示输入密码,(这个密码与与远程ssh登入密码无关)
2、将公钥文件复制到远程服务器上:
$ scp ~/.ssh/id_dsa.pub user@remote.host:pubkey.txt
$ ssh user@remote.host
$ mkdir ~/.ssh
$ chmod 700 .ssh
$ cat pubkey.txt >> ~/.ssh/authorized_keys
$ rm ~/pubkey.txt
$ chmod 600 ~/.ssh/*
$ exit
//权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能。
Public-key 认证机制比密码要安全, 因为密码不在网络上传输. 而且可以是用加密的方式存储的,为了安全,也可以设置一个passphrase,这样,别人拿到密钥也没有用.
如果以上步骤不能实现不输密码登陆的话,需要检查sshd服务的Pubkey认证功能是否默认打开
/etc/ssh/sshd_config:
PubkeyAuthentication yes
如果修改后记的要重起你的ssh服务,用ssh –v来显示详细的登陆过程.
最后一步
建议不使用静态密码,我们都使用key了,修改如下内容可以关闭使用密码认证:
UsePAM yes
为
UserPAM no
关闭Pam的传统密码认证.
如果使用Windows中的Putty
如果想使用putty,因为ssh-keygen生成的SSH2和putty的key格式不同,无法直接使用,必须用 puttygen.exe 转换一下:
把Linux的id_rsa想法copy到windows中,运行puttygen.exe,选择菜单Conversions->Import key然后save private key,就可以使用这个private key设置putty了.
Windows中设置Putty使用key
1) 启动Putty,设置好session的各项参数(如果以前已经设置过,那么load一下),然后从左边选择“SSH->Auth”,点击 Browse 按钮,选择 key.ppk 文件。
2) 设置 auto-login 用户名,Connection -> Data -> Auto-login username
3) 再从左边选择 Session,然后点击 Save 按钮把修改保存下来。然后点击Open 按钮就可以登录了。
如果上面的操作都没有问题,那这时应该就自动登录了,无需输入密码。
putty的密钥转换成SecureCRT的密钥
以前用的是putty,生成了PUB/PRIVATE KEY的,现在用puttygen.exe load private key,然后用Conversions导出到openssh格式的private key,名为identy,接着把pubkey也导出来,叫identy.pub,放到相同的目录下,最后在securecrt的session里指定 private key就OK了,一定要弄成xx xx.pub的,否则笨笨会说找不到密码。
例: secureCRT 配置公钥
在windows客户机上,建立C:/SSH目录,然后将id_dsa和id_dsa.pub原封不动的复制到C:/SSH里,确保文件名为id_dsa和id_dsa.pub
配置SCRT
请确认SecureCRT安装或升级到4.0以上,我目前使用的是4.1,然后开始配置。
第一步:打开要配置证书的主机名记录,选中主机名后,点图中红色方框的图标,进入该主机的详细配置界面。
第二步,Connection页中,Username填写要登陆的用户,该用户就是刚才创建证书的用户,这个必须注意。然后在Connection --> Authentication 中,Primary认证方法选PublicKey,并点开“Properties”。
第三步,选Use session public key ,意思是每个不同会话使用不同的证书,这对于管理大量主机的系统管理员较为有用。如果只是维护少量机器,可以考虑使用同一套证书。
Use identity file那里,打开“...”按钮,浏览我的电脑,找到C:/SSH目录,然后看到id_dsa和id_dsa.pub文件,选中id_dsa文件,然后确定,就可以看到路径为C:/SSH/id_dsa 了。
保存好配置,关闭SecureCRT,然后打开配置了证书的主机,正常情况下将提示要输入密钥的加密字,输入后就应该可以登陆进系统了。
同时再打开另一个SCRT窗口。登陆同样的主机,由于SCRT已缓存了证书及加密字,因此不再需要输入用户名密码,使用就很方便了!