【工具】配置SSH免密登录,免密推送GIT
2022-07-30 08:48:21 # 工具

概要

你是否有如下的尴尬局面:

  1. 添加一个新的仓库,推送GIT都要进行用户名和密码的输入。

  2. 新买了一台VPS服务器,又经常忘记密码。非常难受。

解决方案

使用 安全外壳协议SSH 可以在不安全的网络中为网络服务提供安全的传输环境。最常用的途径就是 SSH远程登录

登录就含有多种身份认证,

  1. 用户名+密码(常见)

  2. 非对称加密密钥。

非对称加密

也叫做:公开密钥加密。这个加密与解密的过程中,存在两个密钥;

  • 私钥:非常重要,切勿保护好你的私钥,只能由你个人持有,不能外泄。

  • 公钥:可以发放给任意你想要与之通信的设备。

公钥与私钥之间形成 N-1 多对一的关系,无论公钥被复制多少份,但是它所对饮的私钥永远只有一份,并且要安全保护在你的手里。

加密与解密

通过公钥加密后的数据,只有与之对应的私钥才能解开。其他私钥无法解开。

反过来。私钥加密的数据,所有的公钥都可以解开并查看到加密前的内容。

存储位置

一般公钥和私钥默认存储在:

1
2
3
4
5
6
7
# linux 
~/.ssh/id_rsa
~/.ssh/id_rsa.pub

# windows
C:\Users\yourname\.ssh\id_rsa
C:\Users\yourname\.ssh\id_rsa.pub

id_rsa 是私钥,id_rsa.pub 是公钥

windows一般隐藏了.ssh文件夹,通过设置 显示隐藏的文件夹

开始

通过 ssh-keygen 生成你的 公钥私钥

这里使用 Windows 环境下的 Git-bash 进行生成,省去安装其他软件。后面需要配置Git 通过密钥进行登录,所以请确保你的环境下已经安装了 GIT

Git - Downloads

1
2
3
4
5
# check your version
git --version

# generating
ssh-kengen -b 4096
1
2
3
4
5
6
7
8
root@ecs-41794810:~/sshtest# ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:

输入命令后一路回车,使用默认的位置即可。Enter passphr 要求你输入一个密码,空着也行,输入一个也行,如果输入后,还请记清楚你的密码。

生成完成后,切记一定保护好你的私钥!!!

SSH Config

发送你的公钥到Git

注意:这里是公钥,不是私钥,别搞错了。

首先去Github,Gitee等地方配置你的公钥信息,后面要用作登录

这里以Github为例。打开如下链接

Sign in to GitHub · GitHub 点击 New SSH Key 将你公钥的内容粘贴到这个位置。

保存即可。其他网站的配置都大同小异。

Copy到远程服务器

这里的远程服务器指的是,你买了一台VPS,或者是你手头有一台Linux需要通过SSHkey的方式链接。就需要做如下配置。

1
ssh-copy-id yourname@host
  • yourname: linux上有多个用户,需要将你的公钥分给哪个用户?比如root

  • host: 你的服务器所在的IP, 可以是公网IP,或者是本地私有IP,或者域名

输入密码即可上传到远端服务器。

或者手动Copy也行, 将你的公钥放置到如下文件中,如有多个,换行放置。

1
vim ~/.ssh/authorized_keys

配置本地Config

本地 .ssh 文件夹下创建 config 文件

按照需要,加入所需要的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# gitee
Host gitee
User git
HostName gitee.com

# github
Host github
User git
HostName github.com

# gitcode
Host gitcode
User git
HostName gitcode.net

# my merchine
Host merchine
User root
Port 22
HostName xxx.xxx.xxx.xxx
  1. Host: 配置一个别名,方便我们使用

  2. User: 配置登录的用户名

  3. Hostname: 设置远程登录主机的地址,IP或者域名

  4. Port: 端口号,默认22端口

  5. IdentityFile: 私钥文件的位置,我们使用了默认位置,就无需设置

愉快的使用

1
2
# 登录远程主机
ssh your_host

配置Git使用,则需要将你仓库的地址修改为ssh的形式

1
2
git remote rm origin
git remote add origin git@github.com:marchocode/orm-generator.git

以后不管换电脑还是什么。保存好你的 私钥文件与配置文件,即可忘掉那些琐碎的密码。

引用

https://zh.wikipedia.org/wiki/Secure_Shell

Git - Downloads

https://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

https://www.tecmint.com/configure-custom-ssh-connection-in-linux/