Linux 中实现 ssh 免密登录
1. 使用命令行
在控制端使用命令生成私钥密钥对,执行命令 ssh-keygen -t rsa
,一路默认回车即可,然后会在 .ssh/
目录下生成两个文件 id_rsa
和 id_rsa.pub
,如下图。
使用命令 ssh-copy-id root@192.168.16.4
(或者使用 ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
,其中 -i
后跟指定的公钥文件),其中,ssh-copy-id 把本地的ssh公钥文件安装到远程主机对应的账户下;root 是远程登陆的用户,@ 后的 IP 地址是想要远程登陆的机器。如下图,使用命令后,需要在 1 的位置填写 yes 来继续步骤,在 2 的位置填写登录主机的密码来进行下一步,只需输入这一次,以后将不需要输入。最后查看 .ssh/
文件夹下,会发现多了一个文件 known_hosts
。
使用 ssh
命令进行远程登录,会发现不需要登录密码,然后查看 .ssh/
目录,会发现里边多了一个文件 authorized_keys
,对比下即可知道,内容与第一台机器中的 id_rsa.pub
内容相同。
注意:需要注意的是文件的权限问题,其中
~/.ssh
目录的权限至少满足 700,~/.ssh/authorized_keys
文件的权限至少为600
2. 直接将主机的公钥保存为文件
首先,在控制端使用命令生成私钥密钥对,执行命令 ssh-keygen -t rsa
。直接使用命令 cat ~/.ssh/id_rsa.pub >> ~/authorized_keys
,如下图。
然后将 authorized_keys
这个文件放在想要免密登陆的机器的 .ssh/
目录下(如果 .ssh
目录不存在,则新建),然后即可在控制端测试是否可以使用免密登录。
3. 总结
想要实现免密的最终目的是一致的,假如 node1 想要免密登录 node2 ,不管用哪种方法,都是将 node1 中的公钥文件 id_rsa.pub
的内容放到 node2 的 .ssh
目录下的 authorized_keys
文件中。
当然了,不仅仅是 Linux ,Windows 上也是一致的。而且不仅仅可以用于 SSH 远程登陆,还可以用于实现 Github 的免密操作,具体请看下图,也是将 id_rsa.pub 里的东西复制到下图所示 Key 的地方。