无密码登陆其实是指通过证书认证的方式登陆,使用一种被称为"公私钥"认证的方式来进行ssh登录。
这句话是什么意思呢?就是,linux的用户登陆一般都是需要密码的,这里无密码登陆说的就是这个密码,这个密码是针对特定的用户即user的,
并不是针对机器的,所以免密码登陆就是某个用户user免密码登陆,免密码的方式就是公钥认证的方式,这个公钥相当于一把钥匙,比如我想用
机器A的用户user_A登陆机器B的user_A,那么在机器A的用户user_A下,利用ssh生成一个密钥:
ssh-keygen -t rsa -P ''
这里ssh- keygen是生成密钥的命令,-t 和-P都是参数,而rsa是密钥的类型,当然还有dsa类型的,这个dsa和rsa只是 一种加密方法
而已。酱紫,就会发现在文件夹.ssh里多了id_rsa和id_rsa.pub。注意,这个.ssh文件夹一般都是隐藏在用户目录下的,路径一般~/.ssh,所以你
可能需要利用命令ls -al 来查看是不是有这么个文件夹,否则你就要mkdir .ssh了。然后把id_rsa.pub追加到authorized_keys中,追加原因是啥呢?
就是虽然你生成了这个密钥,但是你没授权,人家没法儿用,
所以:
cat id_rsa.pub >> authorized_keys
地方.ssh下就多了authorized_keys这个文件。那这时候能免密码登陆了么?
答案是不行,为什么因为系统还不知道你生成了这么个钥匙,su之后在root下重启ssh服务:
service sshd restart
酱紫,你就能ssh user_A了。
接下来,你要免密码登陆B的user_B,那么利用scp(使用前提,就是能在A上ping通B机器)将这个id_rsa.pub传输到你要登陆的机器B的用户user_B下的.ssh
的文件夹中:
那么,你要在user_B的.ssh中再生成user_B的id_rsa.pub然后追加到user_B的authorized_keys去:scp id_rsa.pub user_B@机器B的ip地址:~/.ssh(建议:
这个id_rsa.pub应该和user_B的id_rsa.pub区别开,可以改成usera_rsa.pub)
scp id_rsa.pub user_B@机器B的ip地址:~/.ssh(建议:这个id_rsa.pub应该和user_B的id_rsa.pub区别开,可以改成usera_rsa.pub)
但是这个过程中还需要输入user_B的密码,然后在.ssh下就多了usera_rsa.pub;然后再user_B的.ssh下将usera_rsa.pub追加到authorized_keys中去。
在B机器的root下重启ssh。
scp id_rsa.pub user_B@机器B的ip地址:~/.ssh(建议:这个id_rsa.pub应该和user_B的id_rsa.pub区别开,可以改成usera_rsa.pub)
v然后修改A和B机器上sshd 配置文件内容:
vim /etc/ssh/sshd_config
找到以下内容,并去掉注释符"#":
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后在机器的用户user_A下ssh B,然后会显示相应登陆成功信息。
另外需要注意的几个权限(chmod):
用户目录权限为 755 或者 700,不能是其他权限;.ssh目录权限必须为755;
id_rsa.pub 及authorized_keys权限必须为644;id_rsa权限必须为600 .