前言
SSH (Secure Shell) 是一种网络协议,用于在不安全的网络中提供安全的远程登录和其他网络服务。以下是关于 SSH 连接的核心信息
SSH 连接的基本原理:SSH 使用非对称加密技术(公钥和私钥)验证身份,确保通信内容加密。流程如下
- 客户端发起连接:请求与服务器建立 SSH 会话。
- 服务器发送公钥:服务器将自己的公钥发送给客户端。
- 验证服务器身份:客户端验证服务器的真实性(通过检查公钥指纹或 CA 证书)。
- 身份验证:客户端通过以下方式证明自己的身份:
- 密码验证:直接输入密码。
- 公钥验证:客户端用私钥签名,服务器用保存的公钥验证。
- 建立加密通道:双方使用会话密钥加密通信内容。
密钥对的生成原理
- 私钥:是通过随机数生成的,属于绝对机密信息。
- 公钥:由私钥经过特定的数学算法推导得出,所有人都可以获取。
- 不可逆性:无法通过公钥反向计算出私钥,这是加密体系安全性的关键所在。
连接流程图如下
这里主要讲解和使用公钥验证的步骤,下面我挑两个功能来演示
Git使用SSH拉取代码
- 我们在拉去
Git
仓库时,可以看到Web UI
会提供两种克隆方式
- 使用
http + 账号 + 密码
克隆- 使用
SSH
克隆- 当然,我们大部分人肯定都会使用第一种方式,方便,简单。但是有时候我们克隆的环境不会把我们的账号密码保存到
凭据管理
中,导致我们每次提交代码都需要输入账号+密码,非常的麻烦。那我们就可以考虑使用SSH
的方式来避免这种困扰(当然,也会更加的安全)- 下面我以
windows
使用SSH
拉取Git
仓库代码为例演示
1、本地生成公私钥
我们可以使用
windows
自带的命令生成,打开**Windows PowerShell**
或者**Git Bash**
。通过命令
ssh-keygen
生成 SSH Keyssh-keygen -t ed25519 -C "Gitee SSH Key"
-t ed25519
指定密钥类型为Ed25519
(推荐的现代加密算法)-C
添加注释,方便识别该密钥的用途。下面我们连续三个回车确认即可,输出如下
公私钥即生成完毕
2、查看生成的公私钥
上面步骤执行完成后,根据第一步的回车路径,即可查找到生成的公私钥文件
id_ed25519
:私钥文件,放在客户端保存id_ed25519.pub
:公钥文件,可以公开,使用记事本等工具查看
3、配置公钥
接下来,我们要把公钥配置到我们的
Git
仓库上右上角用户下拉框中
设置
,左侧菜单SSH公钥
,然后添加公钥
确定后,填写密码验证,即可新增成功,后续拉取代码只需要克隆
ssh
地址,即可自动进行认证,无需再手动填写账号密码了!注意:一台电脑只能对应一份公私钥。如果要换电脑拉取属于你仓库的代码,那么需要重新在新电脑上生成公私钥,再将公钥新增到
Git
仓库上
4、测试
账户的 SSH Key 和账户绑定,当账户具有 推送/拉取 权限时可通过 SSH 方式 推送/拉取 的仓库。
通过
ssh -T
测试时,输出 SSH Key 绑定的用户名:$ ssh -T git@gitee.com Hi USERNAME! You've successfully authenticated, but GITEE.COM does not provide shell access.
上面命令要在
Git 命令行
中输入验证
5、将原根据HTTP
地址拉下来的仓库改为SSH
- 当学会上面使用
SSH
的连接方式时,你可能会想修改原来使用HTTP
拉取下来的代码,否则即便你配置好公钥了,但还是不能使用ssh
连接- 命令如下:
# 查看远程仓库地址,首先要进入项目的目录,打开cmd窗口
git remote -v
# 修改远程仓库地址,比如:git remote set-url origin git@github.com:user/repo.git
git remote set-url <remote-name> <new-url>
# 最后再执行第一个命令,查看仓库地址是否修改成功
使用SSH
连接Linux
- 下面使用
windows
连接Linux(CentOS 7)
为例进行演示
1、本地生成公私钥
- 这里和上面第一章节一模一样,就不演示了本地生成公私钥,我这里只使用命令
ssh-keygen
生成
2、确认并开启服务器的SSH
服务
以下命令基于
CentOS 7
,其余操作系统的命令网上搜一下就好了
# 检查当前ssh服务是否启动
systemctl status sshd
# 如果没有安装的话安装ssh
yum install openssh-server
# 启动SSH服务
systemctl start sshd
# 设置 SSH 服务开机自启
systemctl enable sshd
# 再次执行第一个命令,查看状态
3、配置公钥
3.1、方法一(使用 ssh-copy-id
(需先安装))
安装工具
scoop install ssh-copy-id # 需先安装 Scoop 包管理器
复制公钥,执行如下命令,例如:
ssh-copy-id root@192.168.71.111
ssh-copy-id user@server_ip
执行过程:
- 系统会提示输入服务器密码(仅首次需要)。
- 验证成功后,公钥会自动添加到服务器的
~/.ssh/authorized_keys
文件中。
3.2、方法二(手动复制)
接下来,我们要把本地生成的公钥文件,放入
Linux
服务器的~/.ssh/authorized_keys
文件中,执行如下命令# 先检查是否有/root/.ssh/authorized_keys文件,如果没有先创建 mkdir -p /root/.ssh cd /root/.ssh touch authorized_keys # 追加文件内容 echo 你的公钥内容 >> ~/.ssh/authorized_keys
4、连接服务器
打开
windows
的PowerShell
,输入以下命令,比如:ssh root@192.168.71.111
ssh 用户名@服务器IP地址
当首次连接到服务器时,系统会询问是否接受服务器的公钥。键入
yes
然后按Enter
。输入
CentOS
用户的密码并按Enter
。预期结果:
- 若配置正确,将直接连接,无需输入密码(除非设置了密钥密码)。
- 若仍提示密码,可能是公钥未正确配置。