我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。
显然,要做到这一点,一个简单的方法是使用命令
ssh -i <key location> login@server.example.com
这很麻烦。
有什么建议可以让你做这件事更容易一些吗?
我想使用多个私钥连接到不同的服务器或同一服务器的不同部分(我的用途是服务器的系统管理、Git管理和同一服务器中的正常Git使用)。我尝试简单地将密钥堆叠在id_rsa文件中,但没有用。
显然,要做到这一点,一个简单的方法是使用命令
ssh -i <key location> login@server.example.com
这很麻烦。
有什么建议可以让你做这件事更容易一些吗?
当前回答
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
其他回答
对密钥使用ssh-agent。
您可以在~/中创建一个名为config的配置文件。ssh文件夹。它可以包含:
Host aws
HostName *yourip*
User *youruser*
IdentityFile *idFile*
这将允许您像这样连接到机器
ssh aws
对我来说,在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。
这是我从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
这是我使用的源代码。
我喜欢在~/.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)。