使用 SSH 连接 Git 服务器
关于 SSH
SSH (Secure Shell) 是一种安全的远程登录协议,可以让你通过安全的加密连接进行远程登录。目前,Mac、Windows 10、Linux 系统均有内置 OpenSSH 客户端。如果你想通过 SSH 连接到 Gitea,首先需要创建一对 SSH 密钥(即公钥和私钥),然后将公钥上传到 Gitea。
创建完 SSH 密钥后,在你的本地计算机上,打开一个终端窗口,并运行以下命令:
ssh -T git@gitea.com
如果你的 SSH 密钥配置正确,这条命令应该能够成功连接到 Gitea。
在这里,git
是一个默认的账号,它是你的 SSH 服务器的登录名,而不是 Gitea 账号或者其他任何名称。gitea.com
是 Gitea 服务器的主机名或 IP 地址。如果你的 Gitea 设置中有相应的 SSH 公钥,这条命令应该能够成功连接到 Gitea。
另外,你还可以使用 SSH 协议操作 Git 其他功能,比如拉取或推送 Git 仓库,或者执行远程命令。例如,要将远程 Git 仓库拉取到本地,你可以运行以下命令:
git clone git@gitea.com:gitea/awesome-gitea.git
在这条命令中,gitea/awesome-gitea.git
是你的远程 Git 仓库的名称。
生成/添加 SSH 公钥
Gitea 提供了基于 SSH 协议的 Git 服务,在使用 SSH 协议访问仓库之前,需要先配置好账户的 SSH 公钥。
1.打开终端
2.你可以按如下命令来生成 SSH 密钥对。其中的-C "your_email@example.com"
实际上是一条注释信息,可以填写成你的邮箱地址,并不影响生成密钥的过程。
$ ssh-keygen -t ed25519 -C "your_email@example.com"
提示: 如果系统不支持较新的 Ed25519 算法,你仍然可以使用 RSA 算法:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ferris/.ssh/id_ed25519):[回车,使用默认路径]
Created directory '/home/ferris/.ssh'.
Enter passphrase (empty for no passphrase):[可输入密码]
Enter same passphrase again:[再次输入密码]
Your identification has been saved in /home/ferris/.ssh/id_ed25519
Your public key has been saved in /home/ferris/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:BjlFiHdNt3tI95XnKimBpUV2mhBinfm0jOL9JeG+YDg your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
| .o+=*+ o |
| ..o+=+o= . .|
| .+. ==.o ..o|
| .o.==. + oo|
| . oS...o . o|
| .o. o..o . |
| E oo.oo . |
| o .o. . |
| .. |
+----[SHA256]-----+
3.按照上述 ssh-keygen
的三次提示分别输入回车、密码、确认密码即可生成 SSH 密钥对。通过查看 ~/.ssh/id_ed25519.pub
文件内容,获取到你的 SSH 公钥。请注意:私钥是 ~/.ssh/id_ed25519
。保护好私钥,不要将私钥泄露到网络上。
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJZ1HF2aEd61o7/EJ350EbXfOksjjNGdB66CwGVRco1g your_email@example.com
4.复制生成的 SSH 公钥,通过个人主页 「设置」->「SSH/GPG密钥」->「管理 SSH 密钥」 ,添加生成的 SSH 公钥添加到仓库中。
添加后,在终端(Terminal)中输入
ssh -T git@gitea.com
首次使用需要确认并添加主机到本机 SSH 可信列表。若返回 Hi there, USERNAME! You've successfully authenticated...
内容,则证明添加成功。
Hi there, USERNAME! You've successfully authenticated with the key named id_ed25519, but Gitea does not provide shell access.
添加成功后,就可以使用 SSH 协议对仓库进行操作了。比如拉取、推送、删除分支。
仓库级别的「部署密钥」和账户级别「SSH密钥」的区别
你可以在仓库主页 「设置」->「部署密钥」->「添加部署密钥」,将 SSH 公钥添加到仓库中。
账户级别的「SSH密钥」同时具备推送/拉取的权限,对用户创建/参与的任意仓库均能使用,应用范围广、使用方便。
仓库级别的「部署密钥」只针对当前设置的仓库,且默认情况下不开启推送权限,我们仅仅将部署密钥用作拉取代码,这通常用于 CI/CD 服务器拉取仓库来执行流水线任务。
另外,如果在填写「部署密钥」时勾选了“启用写权限”,将赋予部署密钥推送权限。
测试 SSH 连接
1.打开终端,使用 ssh -T
测试你的服务器
ssh -T git@gitea.com
第一次连接服务器时,你会看到以下提示信息:
The authenticity of host 'gitea.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:Fo6Tm/SLyse8uglFB1JShqQWchU0kcPzSRueD1O9K0I.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
2.输入 yes 验证 Gitea 服务器指纹
Hi there, USERNAME! You've successfully authenticated with the key named id_ed25519, but Gitea does not provide shell access.
如果出现错误,请参考 https://docs.gitea.io/zh-cn/faq/#ssh-issues
git@gitea.com: Permission denied (publickey).
为 Git 客户端配置多个 SSH 私钥
一般而言,在一个设备上使用一个默认密钥对足以,无需为不同服务器生成密钥对。
使用场景
同时拥有多个密钥对,并且为不同的服务器应用了对应的公钥,比如:
- 一个用于企业 Gitea 实例:
~/.ssh/gitea
- 一个用于个人 GitHub 账号:
~/.ssh/github
解决方法
1.生成一个公司内部专用的 SSH 密钥对
ssh-keygen -t ed25519 -C 'my@company.com' -f ~/.ssh/gitea
2.生成一个GitHub专用的 SSH 密钥对
ssh-keygen -t ed25519 -C 'my@example.com' -f ~/.ssh/github
3.新建一个SSH配置文件 ~/.ssh/config
,添加如下内容
其中
Host
和HostName
填写 git 服务器的域名,IdentityFile
填写对应的私钥的路径
Host gitea.com
HostName gitea.com
Port 22
User git
IdentityFile ~/.ssh/gitea
Host github.com
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/github
4.分别测试SSH连通性
ssh -T git@gitea.com
ssh -T git@github.com
更改 SSH 密钥口令
在创建 SSH 密钥时,您可以根据 ssh-keygen
程序的提示设置一个密钥口令,这个口令可以保护您的私钥安全。然而,这个口令并不是必须的,所以在一些网络教程、甚至服务器密钥初始化中都直接跳过口令设置步骤。
设置 SSH 密钥口令可以更好地保护您的私钥安全。如果您的私钥文件被泄露,那么攻击者就可以使用您的私钥进行身份验证,访问您的远程服务器。如果您设置了密钥口令,那么攻击者就需要知道您的密钥口令才能解密您的私钥,进而访问您的远程服务器。因此,设置 SSH 密钥口令可以在一定程度上缓解攻击者滥用您的私钥进行恶意活动。
通过以下命令,您可以更改现有私钥的密码而无需重新生成密钥对:
$ ssh-keygen -p -f ~/.ssh/id_ed25519
> Enter old passphrase: [输入旧密码]
> Key has comment 'your_email@example.com'
> Enter new passphrase (empty for no passphrase): [输入新密码]
> Enter same passphrase again: [重复确认新密码]
> Your identification has been saved with the new passphrase.
使用 ssh-agent 可以避免重复输入私钥密码
ssh-agent
是一个守护进程,它可以管理您的 SSH 私钥,并且自动为您解密私钥。这样,您就不需要每次使用 SSH 命令时都输入私钥口令。但要注意的是 ssh-agent
仅仅将数据保存在内存中,程序重启后历史记录全部丢失,需要重新配置。
要使用 ssh-agent
,首先需要启动它。通常,可以在命令行中输入以下命令来启动 ssh-agent
:
eval "$(ssh-agent -s)"
启动 ssh-agent
之后,您可以使用以下命令将您的 SSH 私钥添加到 ssh-agent
中:
ssh-add ~/.ssh/id_ed25519
您可以将多个私钥添加到 ssh-agent
中,这样就可以使用不同的私钥访问不同的远程服务器。
使用 SSH 连接 Git 服务器的更多相关文章
- ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法
ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改 ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容 export PS1='[\u@\ ...
- Centos6架设GIT服务,windows客户端使用TortoiseGit加载KEYGEN连接GIT服务器
前几天得空,想起前一阵学了GIT还没好好实践,就在虚拟机中安装测试了一下,并简单记录了CENTOS6中GIT安装,ssh-keygen生成,客户端使用TortoiseGit加载KEYGEN连接GIT服 ...
- Mac下ssh连接远程服务器时自动断开问题
在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...
- 同一台电脑使用多个ssh连接git,出现权限不够的问题
在本地使用多个ssh连接git时出现如下错误: Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 当一台电脑上同时使用多个ssh k ...
- 通过ssh连接git操作
项目又一次从svn切换到git,而且要求使用安全协议ssh连接git.不管是个人还是组织,git上只负责导入公钥,而不会帮你生成.这里先说下怎么生成这个ssh的私钥和公钥. 首先你得找到有ssh命令的 ...
- [转]学习win10的bash使用ssh连接远程服务器
1. 前言 微软已经在Win10一周年更新预览版中加入了Ubuntu Bash命令支持,相当于一个小型的linux系统,本来连接远程服务器的话,要使用putty啥的,现在可以用这个直接连接,我来讲讲步 ...
- Python ssh连接Linux服务器报Incompatible ssh peer (no acceptable kex algorithm) 解决方法
python通过ssh连接linux服务器,部分服务器出现如下异常 03:50:48.725 FAIL ftp operation failed, Incompatible ssh peer (no ...
- 使用SSH连接AWS服务器
使用SSH连接AWS服务器 一直有一台AWS云主机,但是之前在Windows平台都是使用Xshell连接的,换到Ubuntu环境之后还没有试,昨天试了一下,终于使用SSH连接成功了,这里记录一下步骤: ...
- Mac使用SSH连接远程服务器
1. 终端通过 ssh 连接远程服务器 ssh -p 36622 root@localhost 2. 文件上传下载 上传 scp 下载 scp 3. 客户端 FinalShell(推荐) FileZi ...
- SSH方式连接Git服务器需要注意的地方
如何安装Git?这个我这里就不再多说了,想要了解的可以自行百度,以下文字是基于本地Git安装OK,且Git服务器可用的情况下,我的Git是GitLab 接下来开始操作 1:首先在本地生成私钥和公钥,这 ...
随机推荐
- Alermanager_template,email
default.tmpl {{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing ...
- day04-MySQL常用函数01
5.MySQL常用函数 5.1合计/统计函数 5.1.1合计函数-count count 返回行的总数 Select count(*)|count (列名) from table_name [WHER ...
- P3008 [USACO11JAN]Roads and Planes G (最短路+拓扑排序)
该最短路可不同于平时简单的最短路模板. 这道题一看就知道用SPFA,但是众所周知,USACO要卡spfa,所以要用更快的算法. 单向边不构成环,双向边都是非负的,所以可以将图分成若干个连通块(内部只有 ...
- C++ 标准文档
正式的 C++ 标准文档不是免费的,需要付费购买,可以到 ISO Store 或者其成员国的标准商店购买正版(中国 SACinfo 标准信息服务网,美国 ANSI WebStore,其他成员国可查看 ...
- JS复制粘贴效果
话不多说.直接上代码 HTML: 1 <div> 2 老师入会密码:<input type="text" id="tPass"> < ...
- Windows活动目录_票据——敬请期待!
票据:域控&域机子之间的信任密钥 [缺省40天更换一次] 域用户登录过程 域用户的账户密码(用信任密钥加密的)传递至域控: 域控验证账户密码成功后,构造域用户SID和组SID(用信任密钥加密的 ...
- 7_vue的数据代理,双向绑定
回顾 object.defineProperty() 方法 区别 defineProperty == 给对象定义属性用的 需要传递三个基本参数 需要定义属性的对象名 你要定义的属性叫什么名字(比如给p ...
- NLP之TextLSTM(预测单词下一个字母)
LSTM 目录 LSTM 1.理论 1.1 LSTM与RNN 1.1.1 RNN的缺点 1.1.2 LSTM 1.2 LSTM基本结构 2.实验 2.1 实验步骤 2.2 算法模型 1.理论 1.1 ...
- 44.drf缓存
DRF原有缓存 Django缓存.配置:https://www.cnblogs.com/Mickey-7/p/15792083.html Django为基于类的视图提供了一个 method_dec ...
- .net core Blazor+自定义日志提供器实现实时日志查看器
场景 我们经常远程连接服务器去查看日志,比较麻烦,如果直接访问项目的某个页面就能实时查看日志就比较奈斯了,花了1天研究了下.net core 日志的原理,结合blazor实现了基本效果. 实现原理 自 ...