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
评论
皓哥,你的文中代码是什么主题颜色啊
6 年 10 个月 以前
哈哈,我也不记得了。你在 https://highlightjs.org/ 官方找找看。
6 年 10 个月 以前