我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。

显然,要做到这一点,一个简单的方法是使用命令

ssh -i <key location> login@server.example.com 

这很麻烦。

有什么建议可以让你做这件事更容易一些吗?


当前回答

您可以在~/中创建一个名为config的配置文件。ssh文件夹。它可以包含:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

这将允许您像这样连接到机器

 ssh aws

其他回答

在Ubuntu 18.04 (Bionic Beaver)上没有什么可做的。

成功创建第二个SSH密钥后,系统将尝试为每个连接查找匹配的SSH密钥。

你可以用下面这些命令创建一个新密钥:

# Generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen

# Make sure ssh agent is running
eval `ssh-agent`

# Add the new key
ssh-add ~/.ssh/id_rsa_server2

# Get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub

对密钥使用ssh-agent。

GitHub上的多个键对

1.0 SSH配置文件

1.1创建~/.ssh/config

1.2 chmod 600 ~/。ssh / config(必须)

1.3在文件中输入如下内容:

主机披萨 主机github。com 选择公共关系 IdentityFile ~ / . ssh / privatekey1

案例A:全新的Git克隆

使用此命令克隆Git:

$ git clone git@pizza:yourgitusername/pizzahut_repo.git

注意:如果以后要更改.ssh/config的主机名“pizza”,进入Git克隆文件夹,编辑.git/config文件URL行(见case B)

情况B:已经有Git克隆文件夹

2.1进入克隆文件夹,进入“。git”文件夹

2.2编辑配置文件

2.3将URL从*old更新为new:

(Old) URL = git@github.com:yourgitusername/pizzahut_repo.git

(New) URL = git@pizza:yourgitusername/pizzahut_repo.git

对于那些使用aws的人,我强烈建议使用EC2实例连接。

Amazon EC2 Instance Connect提供了一种使用secure Shell (SSH)连接到实例的简单而安全的方法。

使用EC2实例连接,您可以使用AWS身份和访问管理(IAM)策略和原则来控制对实例的SSH访问,从而消除了共享和管理SSH密钥的需要。

在安装相关的包(pip install ec2instanceconnectcli或直接克隆repo)后,您可以通过更改实例id轻松连接到多个EC2实例:


幕后发生了什么?

当您使用EC2实例连接连接到实例时,实例连接API将一次性使用的SSH公钥推送到实例元数据中,该公钥在该实例元数据中保持60秒。附加到您的IAM用户的IAM策略授权您的IAM用户将公钥推送到实例元数据。

SSH守护进程使用在安装实例连接时配置的AuthorizedKeysCommand和AuthorizedKeysCommandUser从实例元数据中查找公钥进行身份验证,并将您连接到实例。

(*)亚马逊Linux 2 2.0.20190618或更高版本和Ubuntu 20.04或更高版本预先配置了EC2实例连接。 对于其他受支持的Linux发行版,必须为支持使用Instance Connect的每个实例设置Instance Connect。这是每个实例的一次性需求。


链接:

设置EC2实例连接 使用EC2实例连接进行连接 使用Amazon EC2实例连接保护您的bastion主机


这是我从sajib-khan的回答中得到的灵感。没有设置默认配置;这是我在GitLab上的个人账号,另一个是我的公司账号。以下是我所做的:

生成SSH密钥

ssh-keygen -t rsa -f ~/.ssh/company -C "name.surname@company.com"

编辑SSH配置

nano ~/.ssh/config
    Host company.gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/company

删除缓存的SSH密钥

ssh-add -D

测试它!

ssh -T git@company.gitlab.com

欢迎来到GitLab, @hugo.sohm!

ssh -T git@gitlab.com

欢迎你的芳名…

使用它!

公司账户

git clone git@company.gitlab.com:group/project.git

个人/默认账户

git clone git@gitlab.com:username/project.git

这是我使用的源代码。