Public Key认证基本原理
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来欺骗登录)。
Public Key配置
使用一种被称为”公私钥”认证的方式来进行ssh登录. “公私钥”认证方式简单的解释:
首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/idrsa.pub; 私钥文件:~/.ssh/idrsa)
然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了
步骤如下:
1. 本地创建 key
先要在本地生成一个 rsa 的公共 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
- 启动Putty,设置好session的各项参数(如果以前已经设置过,那么load一下),然后从左边选择“SSH->Auth”,点击 Browse 按钮,选择 key.ppk 文件。
- 设置 auto-login 用户名,Connection -> Data -> Auto-login username
- 再从左边选择 Session,然后点击 Save 按钮把修改保存下来。然后点击Open 按钮就可以登录了。
如果上面的操作都没有问题,那这时应该就自动登录了,无需输入密码。