记一下 SSH 的使用场景,每次忘记都要查,真的很恼火
配置 SSH 向 Github 提交代码
生成 SSH 秘钥
ssh-keygen -t ecdsa -b 521 -C "for github use"
上面的命令生成了用 ECDSA 方式加密的秘钥。长度为 521 bit(-b 521),对这个秘钥的注释 -C "for github use"
选择加密算法
-t 选择加密的算法,可以选择 ECDSA,RSA,DSA,OpenSSH 5.7 建议默认使用 ECDSA,因为它生成的密钥更小,安全性更高。在 5.7 版本之前可能不支持 ECDSA 加密,可以换用其他的加密方式
可以通过以下命令查看当前 SSH 版本
ssh -V
# OpenSSH_7.6p1, LibreSSL 2.6.2
选择秘钥的存储位置和密码
Enter file in which to save the key (/Users/aximario/.ssh/id_ecdsa): /Users/aximario/.ssh/github
# 默认的秘钥名是 id_ecdsa 我这里直接改成了 github,因为我要管理多个秘钥,想怎么命名都可以
Enter passphrase (empty for no passphrase):
# 可以输入一个密码,默认为空就好,直接回车键,如果有密码,提交代码时还需要输入密码才行
Enter same passphrase again:
# 需要再次确认,再一次回车键
Your identification has been saved in /Users/aximario/.ssh/github.
Your public key has been saved in /Users/aximario/.ssh/github.pub.
The key fingerprint is:
SHA256:wAZS2NXoRNsXO/mIzA1e5iY7Vtp7sd2a500h13oG4OQ for github use
The key's randomart image is:
+---[ECDSA 521]---+
| .+oooo . |
| ...ooo. + |
| o= o B o |
| ..= O B . .|
| S * E..o.|
| B . oo.|
| = . +..+|
| . . .o .=+|
| .. o+o|
+----[SHA256]-----+
好了,这样,你的秘钥就生成成功了。可以通过 ls ~/.ssh 命令查看一下,应该会有 github(私钥) 和 github.pub(公钥) 两个文件。然后就可以把公钥拷到 Github 里了。
pbcopy < ~/.ssh/github.pub
# 把公钥拷贝到剪贴板
然后在 Github 里 Settings -> SSH and GPG keys 里添加你的公钥。好了,搞定。
配置多个 SSH 秘钥
很多时候我们不仅需要有 Github 上的秘钥,还要一个公司用的,所以要同时存在多个秘钥,比方我们再来一个 Gitlab 的秘钥,步骤和上面生成 Github 秘钥的方式一样,我只是把秘钥命名为了 gitlab
ssh-keygen -t ecdsa -b 521 -C "for gitlab use"
Enter file in which to save the key (/Users/aximario/.ssh/id_ecdsa): /Users/aximario/.ssh/gitlab
# ...后面一样的,包括把公钥放到 Gitlab 上
然后我们看一下我们现在的 SSH 秘钥:
ls ~/.ssh
# github github.pub gitlab gitlab.pub
接着在 SSH 目录下新建一个 config 文件
vi config
然后贴上下面的配置,保存:
# --------- Github -----------
Host github.com
IdentityFile /Users/aximario/.ssh/github
# ----------------------------
# --------- Gitlab -----------
Host gitlab.com
IdentityFile /Users/aximario/.ssh/gitlab
# ----------------------------
好了,这样就配置完了,克隆不同的仓库会用对应的 SSH 秘钥。
不同的 Git 仓库配置不同的账户和邮箱
因为有了不同的 Git 仓库,我们肯定会有公司的邮箱和自己的 Github 邮箱。
首先可以配置全局的邮箱和 email 为公司
git config --global user.name "your_name"
git config --global user.email "your_email"
因为这样可以保证默认是公司的邮箱和用户名,在公司的提交上不会出现自己的用户名的尴尬。然后对于自己的项目,可以在克隆下来之后,进入到项目目录,手动设置为自己的用户名和邮箱
git config user.name "your_name"
git config user.email "your_email"
使用 SSH 登录远程服务器
登录服务器的常见方式有两种,一种是通过账号密码登录,另一种是通过 SSH Key 登录
账号密码登录
ssh username@remote-server.org
如果是第一次登录,会提示类似于下面的信息:
The authenticity of host 'remote-server.org (123.123.88.66)' can't be established.
ECDSA key fingerprint is SHA256:xpJjulKLQtQ2CQwkmONfsxszLKC0E36gTsEGT4fRBYs.
Are you sure you want to continue connecting (yes/no)? yes
这是提示你是否确定这个服务器是你想要登录的服务器,并且把这个服务器加入到已经确认的服务器列表中。一般我们输入 yes 就好了
然后就会提示你输入登录的密码,如果密码正确就能登录到远程服务器的 shell 了。
SSH Key 登录
同样使用上面的方式生成新的秘钥对,加入我们生成的秘钥对为 ~/.ssh/demo 和 ~/.ssh/demo.pub
然后我们把公钥上传到远程服务器,记住是公钥,别传错了,带 .pub 的那个
ssh-copy-id -i ~/.ssh/demo.pub username@remote-server.org
-i 后面是你公钥的地址
username@remote-server.org 是你自己服务器的名字和你的登录名,例如:
- root@axi.name
- axi@123.123.88.66
接着在 ~/.ssh/config 里加上下面的配置
# --- demo server -----
Host demo
User root
HostName remote-server.org
IdentityFile /Users/aximario/.ssh/demo
# ----------------------------
然后就可以通过 ssh demo 来登录服务器了,如果是第一次登录也会出现上面的提示。