原理
密码的方式的即时认证的方式 。而公私钥 是在服务器保存一份已经通过认证的加密串,登录时通过这个加密串去认证。
公钥是可以传播的,私钥只能在自己的本地
公私钥的工作原理, 可以参考这篇文章: SSH公钥登录(私钥认证)原理
生成 公私钥
有机器A,B。现想A通过ssh免密码登录到B。
ls -al ~/.ssh
检测 A主机下是否已经生成过 SSh key , 如果存在 id_rsa
和 id_rsa.pub
的话,说明已经生成过 SSH key 了。可以直接下一步。 否则要先生成。
使用 ssh-keygen
命令 , your-email@example.com
替换为你的邮箱。
> ssh-keygen -t rsa -C "your_email@example.com"
Generating public/private rsa key pair.
命令行会提示让你指定秘钥的名称,按回车键将 SSH Key 保存到默认文件名即可:
Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
如果要更改路径,这里要输入绝对路径,不然就出现在根目录
/
下了。(一般不要修改,默认路径最好)
接下来会询问你为 SSH Key 设置密码,按回车键即可,默认为空密码:
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
不输入,直接回车就是空密码了
这一步的密码一定要注意 。 设置为空密码,才能免密码登录, 否则就是要密钥的密码了。 有较多新手朋友烂在了这一步 。明明设置了密钥,却还是要输入密码。就是这个原因了。
可以都选择默认,一路 Enter 键即可.
这个时候如果我们再使用:
> ls -al ~/.ssh
id_rsa id_rsa.pub known_hosts
SSH 秘钥的两个文件:
id_rsa —— SSH 秘钥的 私钥 (Private Key)
id_rsa.pub —— SSH 秘钥的 公钥 (Public Key)
B 主机设置公钥
把A机下的/root/.ssh/id_rsa.pub 复制到B机的 /root/.ssh/authorized_keys文件里,先要在B机上创建好 /root/.ssh 这个目录。
两种方式:
一:
ssh-copy-id root@192.168.1.181
二:用scp复制。
[root@A ~]# scp /root/.ssh/id_rsa.pub root@192.168.1.181:/root/.ssh/authorized_keys
root@192.168.1.181's password:
id_rsa.pub 100% 223 0.2KB/s 00:00
由于还没有免密码登录的,所以要输入一次B机的root密码。
需要特别注意的是:B主机的.ssh文件的所有者要是root,如果不是要改:
chown -R root:root .ssh
同时,B主机的authorized_keys文件,要是600权限的,如果不是,也要改:
chmod 600 authorized_keys
A主机使用公钥免密登录B主机的root用户
[root@A ~]# ssh -l root 192.168.1.181
第一次登录是时要你输入yes。
现在A机可以无密码登录B机了。
小结:登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
想让A,B机无密码互登录,那B机以上面同样的方式配置即可。