SSH
在正式说 id_rsa.pub,之前有必要先说说 SSH。
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。
一般我们都会使用到两种方式去登陆 SSH,密码登陆和证书登陆。初学者都喜欢用密码登录,甚至是 root 账户登录,密码是 123456,这样很容易遭受恶意攻击,所以在实际的工作中和大多数的互联网公司,都是会使用证书去登陆的。
证书登录的步骤
(1)客户端生成证书:私钥和公钥,然后私钥放在客户端,妥当保存,一般为了安全,访问有黑客拷贝客户端的私钥,客户端在生成私钥时,会设置一个密码,以后每次登录 ssh 服务器时,客户端都要输入密码解开私钥(如果工作中,你使用了一个没有密码的私钥,有一天服务器被黑了,你是跳到黄河都洗不清)。
(2)服务器添加信用公钥:把客户端生成的公钥,上传到 ssh 服务器,添加到指定的文件中,这样,就完成 ssh 证书登录的配置了。
假设客户端想通过私钥要登录其他 ssh 服务器,同理,可以把公钥上传到其他 ssh 服务器。
真实的工作中:员工生成好私钥和公钥(千万要记得设置私钥密码),然后把公钥发给运维人员,运维人员会登记你的公钥,为你开通一台或者多台服务器的权限,然后员工就可以通过一个私钥,登录他有权限的服务器做系统维护等工作,所以,员工是有责任保护他的私钥的,如果被别人恶意拷贝,你又没有设置私钥密码,那么,服务器就全完了,员工也可以放长假了。
客户端建立私钥和公钥
如果是 Linux,则在客户端终端运行以下命令,如果是 Windows,则可以用 Git Bash(默认安装了 SSH) 终端运行以下命令:
ssh-keygen -t rsa
rsa 是一种密码算法,还有一种是 dsa,证书登录常用的是 rsa。
假设用户是 blue,执行 ssh-keygen 时,才会在 .ssh/ 这个目录里面产生所需要的两把 Keys ,分别是私钥 (id_rsa) 与公钥 (id_rsa.pub)。
注:Linux 是在 home/.ssh/ 目录下,而 Windows 是在 C:\Users\Feng\.ssh 目录下。
扩展:authorized_keys
就是为了让两个 Linux 机器之间使用 ssh 不需要用户名和密码。采用了数字签名 RSA 或者 DSA 来完成这个操作。
模型分析
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机;
要达到的目的:
- A 机器 ssh 登录 B 机器无需输入密码;
- 加密方式选 rsa|dsa 均可以,默认 dsa。
单向登陆的操作过程(能满足上边的目的):
- 登录 A 机器
-
ssh-keygen -t [rsa|dsa]
,将会生成密钥文件和私钥文件 id_rsa、id_rsa.pub 或 id_dsa、id_dsa.pub - 将 .pub 文件复制到B机器的 .ssh 目录, 并
cat id_dsa.pub >> ~/.ssh/authorized_keys
- 大功告成,从 A 机器登录 B 机器的目标账户,不再需要密码了;(直接运行
#ssh 192.168.20.60
)
双向登陆的操作过程:
- ssh-keygen 做密码验证可以使在向对方机器上 ssh,scp 不用使用密码。
- 两个节点都执行操作:
#ssh-keygen -t rsa
,然后全部回车,采用默认值。 - 这样生成了一对密钥,存放在用户目录的 ~/.ssh 下。
将公钥考到对方机器的用户目录下,并将其复制到~/.ssh/authorized_keys
中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys
)。
参考:
每日扫盲(三):id_rsa、id_rsa.pub 、authorized_keys