SSH 免密码登录远程服务器,Github,gitee 等,以及 SSH config 的配置

需求:在机器 A 上,免密码 ssh 登录到机器 B。

基本步骤

在机器 A 上生成公钥/私钥对

1
ssh-keygen -t rsa

一路回车,会在用户目录的 .ssh 文件夹下生成密钥对 id_rsaid_rsa.pub

生成的密钥对

也可生成多个密钥自行改名,后在 config 中配置不同主机使用不同的密钥。

将机器 A 生成的公钥复制到机器 B 中

可用 ssh-copy-id 命令将机器 A 生成的公钥 id_rsa.pub 复制到机器 B 中

1
2
# username@host_ip
ssh-copy-id -i id_rsa.pub xieqiaokang@192.168.6.31

如果远程服务器不在内网之中,而是通过一个外网 IP 的 xxxxx 端口转发登陆ssh,则与 ssh 登陆一样,指定端口号即可。

1
2
# username@host_public_ip -p port
ssh-copy-id -i id_rsa.pub xieqiaokang@202.38.xx.xxx -p xxxxx

登录到远程机器不用输入密码

1
2
ssh xieqiaokang@192.168.6.31
# ssh xieqiaokang@202.38.xx.xxx -p xxxxx # 若存在端口转发

到此,我们就已经可以直接使用 ssh 免密码登陆服务器了。

配置 github,gitee 等使用密钥认证

github,gitee 等代码托管平台同样支持 ssh 验证,此时上文的机器 B 就可以是 github 对应的主机。github 与 gitee 等都提供了上传公钥的选项,如在 github 中,网页端登陆自己的账号后,进入 settings -> SSH and GPG keys -> New SSH key 即可上传自己的 ssh 公钥,Title 为给自己本地计算机取的名字,如“matebook”,方便记忆该密钥属于哪台主机。Key 则为本地公钥 id_rsa.pub 里面的内容,可以文本编辑器打开后复制上去。

github SSH 公钥上传界面

上传成功后,就可以在 SSH 界面看到已经上传的界面,可将自己的不同电脑的公钥都上传上去,这样在这些电脑上通过 ssh 使用 github 远程仓库时,便可直接通过密钥认证而不需要每次都输入密码。gitee,coding 等托管平台同样支持 ssh key 认证,可以设置里面查看。

上传成功后的SSH密钥管理界面

此时,可通过一下命令在本地验证密钥是否配置成功

1
2
git -T git@github.com
git -T git@gitee.com

如果出现以下结果,说明配置已经成功,红框里面的内容为自己在对应平台上的账号名

github、gitee SSH key 验证

config 文件配置(可选)

经过上述的步骤,我们已经完成了 ssh 通过密钥验证的基本设置,一般情况下可不必再对 config 做额外的配置。如果想要简化每台主机的登陆(取别名,免去每次登陆都需要输入用户名@IP地址),或者想要给每台主机,或者 github,gitee 配置不同的密钥,那么在将不同的公钥上传至对应主机后,则需要配置 config 为每台主机指定对应的私钥进行配对验证。在本地用户目录的 .ssh 下,查看是否有 config 文件,如果没有则创建该空白文本文件,然后按照以下格式填写每台主机。

1
2
3
4
5
Host ti3	                                    # 主机名,随便取
HostName 202.38.xx.xxx # 主机IP(机器B)
Port xxxxx # 若为默认端口22,可不设定此项
User xieqiaokang # 在机器B上的用户名
IdentityFile C:\Users\xieqk\.ssh\id_rsa # 本机私钥路径,若为默认的 id_rsa,则可不填

其中,如果符合默认设置的内容则可不填。User 正常情况下填自己在远程服务器下的用户名,但对于 github 或 gitee 等平台,User 项需填写为 git,具体可参考如下配置。

ssh config 配置文件

此时,可通过之前提到的 ssh -T git@github.com 操作验证 github 密钥配置是否成功。此外,由于给自己的远程主机配置了 ti3 的别名,此时可直接通过以下简化的命令登陆该远程服务器

1
ssh ti3     # 等效于 ssh xieqiaokang@192.168.6.31