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

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

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

这很麻烦。

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


当前回答

重要提示:必须启动ssh-agent

在使用ssh-add之前,必须启动ssh-agent(如果它还没有运行),如下所示:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # Where id_rsa_2 is your new private key file

注意,eval命令在Windows上的Git Bash上启动代理。其他环境可能使用一个变体来启动SSH代理。

其他回答

Randal Schwartz的回答几乎帮助了我。 我在服务器上有一个不同的用户名,所以我必须在我的文件中添加User关键字:

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

现在你可以使用friendly-name进行连接:

ssh friendly-name

更多关键字可以在OpenSSH手册页上找到。注意:列出的一些关键字可能已经出现在/etc/ssh/ssh_config文件中。

我喜欢在~/.ssh/config文件中设置以下方法:

# Configuration for GitHub to support multiple GitHub  keys
Host  github.com
  HostName github.com
  User git

# UseKeychain adds each keys passphrase to the keychain so you
# don't have to enter the passphrase each time.
  UseKeychain yes

# AddKeysToAgent would add the key to the agent whenever it is
# used, which might lead to debugging confusion since then
# sometimes the one repository works and sometimes the
# other depending on which key is used first.
#  AddKeysToAgent yes

# I only use my private id file so all private
# repositories don't need the environment variable
# `GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa"` to be set.
  IdentityFile ~/.ssh/id_rsa

然后在你的存储库中创建一个.env文件,其中包含要使用的ssh命令:

GIT_SSH_COMMAND="ssh -i ~/.ssh/your_ssh_key"

如果你使用dotenv,环境变量会自动导出,你可以为每个项目/目录指定你想要的键。口令只被请求一次,因为它被添加到密钥链中。

这个解决方案与Git一起完美地工作,并且设计为在Mac上工作(由于UseKeychain)。

在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。

重要提示:必须启动ssh-agent

在使用ssh-add之前,必须启动ssh-agent(如果它还没有运行),如下所示:

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # Where id_rsa_2 is your new private key file

注意,eval命令在Windows上的Git Bash上启动代理。其他环境可能使用一个变体来启动SSH代理。