多个账号 配置 SSH 密钥 (aliyun.com)

1,029 阅读5分钟

hanpanpan200.github.io/2019/10/14/…

多个账号 配置 SSH 密钥 (aliyun.com)

背景信息

Codeup 支持的 SSH 加密算法类型如下所示:

算法类型公钥私钥
ED25519 (推荐id_ed25519.pubid_ed25519
RSA (不推荐)id_rsa.pubid_rsa

步骤一:查看已存在的 SSH 密钥

我已经有一个密钥了,但是可以去用户根目录下找一下,看看密钥文件名叫什么。
因为第二个密钥文件不能与第一个密钥文件名字相同,否则会覆盖的。

cd ~/.ssh              // 切换到 .ssh文件目录下面

ls            // 查看目录下面有什么文件

ls之后,能看到当前目录下有什么文件,如果第一个账号生成密钥用的是ED25519 算法,应该会有一个id_ed25519.pub 文件,如果是RSA 算法,应该会有一个id_rsa.pub 文件

步骤二:生成 SSH 密钥

  • 基于ED25519算法,生成密钥对命令如下:
ssh-keygen -t ed25519 -C "<注释内容>"

注释会出现在.pub文件中,一般可使用邮箱作为注释内容

点击回车, 选择 SSH 密钥生成路径。

  • 以 ED25519 算法为例,默认路径如下:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):

****** !! 注意,这个时候要看好这个密钥名称是不是和已经存在的那个文件名冲突,
如果冲突,你自己修改一下文件名就好。
比如说在默认文件名后面加一个 : "_1"

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): /home/user/.ssh/id_ed25519_1

密钥默认生成路径:/home/user/.ssh/id_ed25519,公钥与之对应为:/home/user/.ssh/id_ed25519.pub
密钥默认生成路径:/home/user/.ssh/id_ed25519_1,公钥与之对应为:/home/user/.ssh/id_ed25519_1.pub

然后一直回车就好,除非你想设置私钥。我不设置,所以我不管我直接回车。

步骤三:拷贝公钥

除了在命令行打印出已生成的公钥信息手动复制外,可以使用命令拷贝公钥到粘贴板下,请参考操作系统使用以下命令进行拷贝:

Windows(WSLGit Bash):

cat ~/.ssh/id_ed25519.pub | clip

我说一下,cat用于查看文件的内容,clip是将内容复制到粘贴板。

|代表管道,意思是执行完前面的动作之后,用前面的结果执行后面的动作

在这里就是,查看公钥内容,并复制到粘贴板。,这行命令结束,粘贴板已经有你的公钥了。

之后直接去代码管理仓库网站的个人设置那里,把公钥粘贴进去就ok

步骤四:在 Codeup 上设置公钥

因为我们用的代码管理仓库是云效。你如果是GitHub的话,就去GitHub就好。

  1. 登录云效 Codeup 页面,在页面右上角选择个人设置>SSH 公钥。
  2. 添加生成的 SSH 公钥信息。

常见问题

本地存在多个密钥时,如何根据目标平台自动选择用于认证的 密钥?

下面这段是官话,不看也行:

当本地存在多个密钥,如果不设置认证规则,本机将随机选择一个密钥用于认证,可能造成认证失败。

因此,在如下场景中,需要自行定义认证密钥的路径:

  • 本地存在多个密钥对应云效的不同账号。
  • 本地存在多个密钥对应不同的代码平台(GitLab,GitHub,云效等)。

用我的意思说,就是多个密钥,当你clone代码的时候,他不知道你从哪个账号的仓库里面clone的。

所以我们需要做一些配置

定义认证密钥路径规则

打开本地终端,按如下格式编辑~/.ssh/config文件

下面是官网的例子.放在这儿了.

# 账号A
Host codeup_1
HostName codeup.aliyun.com
IdentityFile ~/.ssh/codeup_1
PreferredAuthentications publickey
IdentityAgent none
IdentitiesOnly yes

# 账号B
Host codeup_2
HostName codeup.aliyun.com
IdentityFile ~/.ssh/codeup_2
PreferredAuthentications publickey
IdentityAgent none
IdentitiesOnly yes

按照上述配置,使用SSH协议访问时,SSH 客户端会使用文件指定的密钥进行认证,实现访问不同平台或同一平台的不同账号使用本地不同的 SSH 密钥进行认证。

  • 访问 Codeup ,由于 Host 一致,使用别名进行区分使用不同的密钥。
  • 访问 GitLab,根据 Host 进行区分使用不同的密钥。
# 访问 Codeup,将使用 ~/.ssh/id_ed25519.pub 密钥
git clone git@codeup.aliyun.com:example/repo.com

# 以 codeup-user-2 别名访问 Codeup 时,将使用 ~/.ssh/codeup_user_2_ed25519 密钥 
git clone git@codeup-user-2:example/repo.com

# 访问 GitLab 平台,将使用 ~/.ssh/gitlab_ed25519 密钥
git clone git@gitlab.com:example/repo.com

重点!! 这里我踩了一个坑。

先说背景,我的 托管平台服务地址HostName 是一个,相当于一个平台两个账号。

账号A的别名不能和托管平台服务地址一样。如果一样,就会走第一条。

账号A和账号B都必须同时设置别名


我的错误做法:
账号A、账号B地址一样,我把账号A的别名设置成服务平台地址,相当于:
账号A的别名账号A的托管服务平台地址账号B的托管服务平台地址相同。
这就导致我的代码找寻路径根本找不到 账号B的地址。

不给A设置别名也不行。

说实话我不太懂。 在不给账号A设置别名的情况下。
我用账号B的别名clone代码,也说找不到仓库。
是因为如果不给账号A设置别名的话,他就会默认所有地址都走账号A那一条吗?不太懂


一些可以用到的 npm 命令

作者:nickfox
链接:www.jianshu.com/p/f311a3a15…

一、使用淘宝镜像
1.临时使用 (仅当前项目临时用淘宝源下载一下依赖 npm --registry registry.npm.taobao.org install express

2.持久使用
npm config set registry registry.npm.taobao.org

3.通过cnpm
npm install -g cnpm --registry=registry.npm.taobao.org

二、使用官方镜像
npm config set registry registry.npmjs.org/

三、查看npm源地址
npm config get registry