我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。
显然,要做到这一点,一个简单的方法是使用命令
ssh -i <key location> login@server.example.com
这很麻烦。
有什么建议可以让你做这件事更容易一些吗?
我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。
显然,要做到这一点,一个简单的方法是使用命令
ssh -i <key location> login@server.example.com
这很麻烦。
有什么建议可以让你做这件事更容易一些吗?
当前回答
您可以尝试这个sshmulti npm包来维护多个SSH密钥。
其他回答
对密钥使用ssh-agent。
对于那些使用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主机
从我的.ssh/config:
Host myshortname realname.example.com
HostName realname.example.com
IdentityFile ~/.ssh/realname_rsa # private key for realname
User remoteusername
Host myother realname2.example.org
HostName realname2.example.org
IdentityFile ~/.ssh/realname2_rsa # different private key for realname2
User remoteusername
然后您可以使用以下连接:
ssh myshortname
SSH我的其他
等等。
在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
对我来说,在MacOs上,唯一可行的解决方案就是在文件~/.ssh/config中添加这个:
Host *
IdentityFile ~/.ssh/your_ssh_key
IdentityFile ~/.ssh/your_ssh_key2
IdentityFile ~/.ssh/your_ssh_key3
AddKeysToAgent yes
Your_ssh_key没有任何扩展名。不要使用.pub。