关于 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,添加如下内容

其中 HostHostName 填写 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 服务器的更多相关文章

  1. ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法

    ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改  ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容  export PS1='[\u@\ ...

  2. Centos6架设GIT服务,windows客户端使用TortoiseGit加载KEYGEN连接GIT服务器

    前几天得空,想起前一阵学了GIT还没好好实践,就在虚拟机中安装测试了一下,并简单记录了CENTOS6中GIT安装,ssh-keygen生成,客户端使用TortoiseGit加载KEYGEN连接GIT服 ...

  3. Mac下ssh连接远程服务器时自动断开问题

    在mac下使用securecrt通过ssh连接远程服务器时,总会一段时间没有动作后,ssh被自动断开.在windows下用xmanager貌似没有遇到过这个问题. 在网上找了解决方法如下: 客户端配置 ...

  4. 同一台电脑使用多个ssh连接git,出现权限不够的问题

    在本地使用多个ssh连接git时出现如下错误: Permission denied (publickey,gssapi-keyex,gssapi-with-mic) 当一台电脑上同时使用多个ssh k ...

  5. 通过ssh连接git操作

    项目又一次从svn切换到git,而且要求使用安全协议ssh连接git.不管是个人还是组织,git上只负责导入公钥,而不会帮你生成.这里先说下怎么生成这个ssh的私钥和公钥. 首先你得找到有ssh命令的 ...

  6. [转]学习win10的bash使用ssh连接远程服务器

    1. 前言 微软已经在Win10一周年更新预览版中加入了Ubuntu Bash命令支持,相当于一个小型的linux系统,本来连接远程服务器的话,要使用putty啥的,现在可以用这个直接连接,我来讲讲步 ...

  7. 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 ...

  8. 使用SSH连接AWS服务器

    使用SSH连接AWS服务器 一直有一台AWS云主机,但是之前在Windows平台都是使用Xshell连接的,换到Ubuntu环境之后还没有试,昨天试了一下,终于使用SSH连接成功了,这里记录一下步骤: ...

  9. Mac使用SSH连接远程服务器

    1. 终端通过 ssh 连接远程服务器 ssh -p 36622 root@localhost 2. 文件上传下载 上传 scp 下载 scp 3. 客户端 FinalShell(推荐) FileZi ...

  10. SSH方式连接Git服务器需要注意的地方

    如何安装Git?这个我这里就不再多说了,想要了解的可以自行百度,以下文字是基于本地Git安装OK,且Git服务器可用的情况下,我的Git是GitLab 接下来开始操作 1:首先在本地生成私钥和公钥,这 ...

随机推荐

  1. Alermanager_template,email

    default.tmpl {{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing ...

  2. day04-MySQL常用函数01

    5.MySQL常用函数 5.1合计/统计函数 5.1.1合计函数-count count 返回行的总数 Select count(*)|count (列名) from table_name [WHER ...

  3. P3008 [USACO11JAN]Roads and Planes G (最短路+拓扑排序)

    该最短路可不同于平时简单的最短路模板. 这道题一看就知道用SPFA,但是众所周知,USACO要卡spfa,所以要用更快的算法. 单向边不构成环,双向边都是非负的,所以可以将图分成若干个连通块(内部只有 ...

  4. C++ 标准文档

    正式的 C++ 标准文档不是免费的,需要付费购买,可以到 ISO Store 或者其成员国的标准商店购买正版(中国 SACinfo 标准信息服务网,美国 ANSI WebStore,其他成员国可查看 ...

  5. JS复制粘贴效果

    话不多说.直接上代码 HTML: 1 <div> 2 老师入会密码:<input type="text" id="tPass"> < ...

  6. Windows活动目录_票据——敬请期待!

    票据:域控&域机子之间的信任密钥 [缺省40天更换一次] 域用户登录过程 域用户的账户密码(用信任密钥加密的)传递至域控: 域控验证账户密码成功后,构造域用户SID和组SID(用信任密钥加密的 ...

  7. 7_vue的数据代理,双向绑定

    回顾 object.defineProperty() 方法 区别 defineProperty == 给对象定义属性用的 需要传递三个基本参数 需要定义属性的对象名 你要定义的属性叫什么名字(比如给p ...

  8. 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 ...

  9. 44.drf缓存

    DRF原有缓存 Django缓存.配置:https://www.cnblogs.com/Mickey-7/p/15792083.html   Django为基于类的视图提供了一个 method_dec ...

  10. .net core Blazor+自定义日志提供器实现实时日志查看器

    场景 我们经常远程连接服务器去查看日志,比较麻烦,如果直接访问项目的某个页面就能实时查看日志就比较奈斯了,花了1天研究了下.net core 日志的原理,结合blazor实现了基本效果. 实现原理 自 ...