技术工具与实践
多平台切换,如何设置SSH认证
本文介绍如何理解和设置SSH进行仓库认证。
• 3分钟
Contents
介绍
本文主要介绍,在实际使用Git进行仓库认证时,遇到的一些问题。平时除了使用GitHub外,也会使用GitLab, 云效等进行代码管理。
Git命令行操作未授权常见问题
当Git命令行操作因为仓库未授权而失败时,会看到如下错误输出:
remote: 找不到代码库,请确认是否有权限且代码库路径正确
致命错误:无法访问 'https://codeup.aliyun.com/...':The requested URL returned error: 403
或者
找不到代码库,请确认是否有权限且代码库路径正确
致命错误:无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。
Git的SSH认证方式
Git 的 SSH 认证使用公钥认证,通过 ssh-keygen 生成公私钥,并将公钥上传到代码平台个人配置中。
SSH 支持通过主机别名设定公私钥。在 ~/.ssh/config 文件中配置如下:
Host codeup.aliyun.com
User Wayne
HostName codeup.aliyun.com
Port 22
IdentityFile ~/.ssh/personal_gmail
示例配置了主机别名 codeup.aliyun.com,用于本地。当使用 ssh://codeup.aliyun.com/my/example.git 克隆仓库时,实际连接 codeup.aliyun.com,端口 22,用户 git,私钥 ~/.ssh/personal_gmail。
** 如何确认 SSH 协议下 Git 登录的用户账号和使用的公私钥? **
例如,对于 ssh://codeup.aliyun.com/my/example.git
,使用 ssh 登录命令查看认证是否成功及用户名:
$ ssh codeup.aliyun.com
Welcome to Codeup, Wayne!
Connection to codeup.aliyun.com closed.
从输出可以看到云效代码平台服务器允许SSH登录,在显示登录账号为Wayne之后服务器切断连接。
还可以在 SSH 连接命令中添加 -v参数查看认证使用的公私钥,如下:
ssh -v gi*@codeup.aliyun.com
遇到的问题记录
实际推送不成功的原因是因为码云复制的SSH地址中包含的别名为codeup.aliyun.com
。
git remote add origin git@codeup.aliyun.com:xxxx/example.git
而我本地ssh config文件内配置的别名是aliyun
,因此导致认证失败。如下配置为原本配置
Host aliyun
User Wayne
HostName codeup.aliyun.com
Port 22
IdentityFile ~/.ssh/personal_gmail
解决办法
方法一
- 直接将SSH地址中的
codeup.aliyun.com
替换为aliyun
即可。
方法二
- 将 ssh config中的 Host改为
codeup.aliyun.com
。