研究 haddop,发现要求设定ssh免登陆,折腾了半天,最后搞定最简单的方法是让服务器和SSH的客户端相互认证,也就是说SSH客户端在连接服务器时传递私钥,SSH服务器通过公钥认证,最终实现自行安全认证,无需输入密码(或者输入私钥的passphrase)。做为一款ssh客户端putty自然也支持ssh这种方式登录。
A. 如何创建公私钥?
对于SSH主机间的认证实际上需要在客户端主机上产生公私钥,然后在上传只SSH服务器主机。而SSH客户端程序自动认证主要是在SSH主机上配置,然后将私钥提供给客户端程序。
创建putty公私钥的程序为:puttygen
图形方法:
1. 启动puttygen
2. 点击Generate,并不断的在空白处移动鼠标,方便系统根据鼠标移动来随机产生密钥
3. 完毕后的界面如下,此时可以根据个人需求对密钥再填写"passphrase",若没有passphrase,则以后登录完全不需要密码,若有passphrase,则每次使用公私钥认证时需要输入passphrase
4. 分别点击"Save public key"和"Save private key"生成公钥和私钥
字符方法:
1. 产生私钥:
> puttygen -t rsa -C "aotologin" -o test.ppk
+++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++
Enter passphrase to save key:
Re-enter passphrase to verify:
同样,根据自身安全考虑要求填入。其中-t为类型,可用为(rsa,dsa,rsa1),-b指定key的bits,默认为1024,-C 为注释信息,内容无所谓。
2. 提取公钥:
> puttygen -L mykey.ppk > public.key
B. 如何允许SSH公钥被服务器允许
这点和服务器间的认证一致,就是将public.key的信息加入到~/.ssh/authorized_keys 文件中去
这期间有点需要注意的就是authorized_keys文件的权限,根据ssh的man显示:
~/.ssh/authorized_keys
Lists the public keys (RSA/DSA) that can be used for logging in
as this user. The format of this file is described in the
sshd(8) manual page. This file is not highly sensitive, but the
recommended permissions are read/write for the user, and not
accessible by others.
所以authorized_keys必须为700或者600,否则会导致通过私钥公钥来认证ssh的访问报错:
Server refused our key ;产生该问题主要还有两个原因:1 Selinux 设定的问题,一般都用setenforce 1或是 etc/selinux/config SELINUX=disabled关闭 2 sshd的/etc/ssh/sshd_config配置文件不对或是key 写入不对
C客户端如何设置
通常windows 和Linux等的Putty设置方法一致:
设置auto-login username和服务器上home用户一致
选择私钥文件(当然,首先要用其他方法将私钥传输到需要运行putty的主机上去)