🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

使用 SSH Keys 在服务器与代码托管服务去验证身份

SSH Keys 指的是在电脑上生成的一对密钥(公钥 Public Key 与密钥 Private Key)。登录服务器的时候可以使用 SSH Keys 验证你的身份,就是你不再需要手工输入密码就可以通过服务器的身份验证。

准备

先准备命令行工具。Windows:下载使用完整版的 Cmder,然后打开 Cmder,新建一个 Bash 类型的命令行窗口。macOS:使用系统自带的终端。

生成

打开命令行工具。生成的 SSH Keys 会存储在用户主目录的下面,在生成之前先检查一下你的电脑是不是已经有了一对 SSH Keys。

ls ~/.ssh

如果在这个目录的下面你能看到 id_rsa 与 id_rsa.pub ,说明你之前已经有了一对 SSH Keys。这样直接用就行了,不需要再次生成 ,如果再次生成,你之前配置过的使用 SSH Keys 的地方会失效。如果电脑上还没有 SSH Keys,执行下面命令生成一对:

ssh-keygen

一路回车,就可以生成一对 SSH Keys。

ssh-keygen 这个工具包含在完整版的 Cmder 里面。

示例:~/.ssh/id_rsa

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAuWscaSyUcItVtlq2oXVbqu5gOETD0SrqvQ21k90KxM7zblLt
HD0oHc17CpPIIqbOsya5uhq0RK2oppGywy5zEuu9CxgTupa0fKCg02H0A9ZvLfat
...
-----END RSA PRIVATE KEY-----

示例:~/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5axxpLJRwi1W2WrmA4RMPRKuq9DbWT3QrEzvNuUu0cPSgdzXsKk8gips6zJrKDTYfQD1m8t9q19eR1eLzSpG+O00iQB0eIcSVb9EzDaXuuZz0mgZK9T0kh6sCsFasAzT9w5rUhViv8HjnPc8y641zEUd8aWl87l53ikDJ6qmsVQe1R2JPs6YLvZcw+Q6MUPbB3wKZC4UOIDbvsstdvC8nj1SWExutQy5tp00zQVJygw8spO2Ea7t2TK+K1wWNecmRV8s0aQVOju2WCOpRjNP2wWZzJlupq02GFWSLvrKAt0Y0V3 xiaoxue@iMac.local

在服务器中使用 SSH Keys

现在,SSH 登录到服务器的时候,如果你想使用 SSH Keys 的方式,需要把在自己电脑上生成的公钥里的内容放在服务器的用户主目录下面的 authorized_keys 文件里。你可以手工先用密码的方式登录到服务器,进来以后在当前用户主目录下面的 .ssh 目录下面,新建或者编辑一下 authorized_keys 文件,把在自己电脑上生成的公钥(id_rsa.pub)内容放到这个  authorized_keys 文件里。

ssh-copy-id

ssh-copy-id 这个小工具可以帮我们把自己的公钥内容放到服务器用户的 authorized_keys 文件里。Windows 上用的完整版的 Cmder 里自带这个工具,在 Bash 模式下你可以直接使用。macOS 用法需要单独去安装这个工具,可以使用 Homebrew 安装。

用法

下面的命令会把我们电脑上的 id_rsa.pub 里的内容,放到 IP 地址是 42.120.40.68 的这台服务器的 wanghao 这个用户的 authorized_keys  文件里。

ssh-copy-id -i ~/.ssh/id_rsa.pub wanghao@42.120.40.68

现在,我登录到 42.120.40.68 这台服务器的时候,不需要输入密码,直接就能进来。

ssh wanghao@42.120.40.68

在代码托管服务中使用 SSH Keys

代码托管指的就是一些远程仓库服务。比如 Github,Coding.net,阿里云 Code 等等。我们可以在这些服务商那里配置使用 SSH Keys,在 Github 网站上,配置的位置是在 Settings —— SSH and GPG Keys 。

主要就是把我们电脑上生成的公钥内容(id_rsa.pub)放到代码托管服务商的帐户设置里。这样如果项目的远程仓库地址用的是 SSH 类型的,你再执行 push 或者 pull 的时候,就不需要手工输入你在托管服务商那里注册的用户名与密码了。

远程仓库的地址

远程仓库的地址有两种,一种是 HTTPS,一种是 SSH。下面是 ninghao 这个用户的 nest 这个仓库,在 Github 网站上的远程仓库的两种地址。

HTTPS 类型的地址:

https://github.com/ninghao/nest.git

SSH 类型的地址:

git@github.com:ninghao/nest.git

常见问题

在 SSH 的时候,你可能会遇到 “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!” 这样的警告。解决的方法是在用户主目录下的 .ssh/known_hosts 文件里,删除掉你想 SSH 的那台主机的记录。可以手工清除,也可以使用工具,像这样:

ssh-keygen -R 42.120.40.68

评论

皓哥,你的文中代码是什么主题颜色啊

哈哈,我也不记得了。你在 https://highlightjs.org/ 官方找找看。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点