Answers:
来自我.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
等等。
IdentityFile
条目Host
,然后在连接时按顺序尝试。
IdentitiesOnly yes
防止的〜/ .ssh / id_rsa或任何其它身份。(本来是编辑)
您可以指示ssh在连接时连续尝试多个键。就是这样:
$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on
$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$
这样,您不必指定哪个密钥可与哪个服务器一起使用。它只会使用第一个工作密钥。
同样,只有在给定服务器愿意接受密钥的情况下,您才输入密码。如上所示,.ssh/id_rsa
即使没有密码,ssh也不会尝试要求输入密码。
当然,它不会像其他答案中那样超越每个服务器的配置,但是至少您不必为连接到的所有服务器添加配置!
Randal Schwartz的回答几乎一路帮助了我。我在服务器上使用了不同的用户名,因此必须将User关键字添加到文件中:
Host friendly-name
HostName long.and.cumbersome.server.name
IdentityFile ~/.ssh/private_ssh_file
User username-on-remote-machine
现在,您可以使用友好名称进行连接:
ssh friendly-name
在OpenSSH手册页上可以找到更多关键字。注意:列出的某些关键字可能已经存在于/ etc / ssh / ssh_config文件中。
先前的答案已正确说明了创建配置文件以管理多个ssh密钥的方法。我认为,还需要说明的重要事情是在克隆存储库时用别名替换主机名。
假设您公司的GitHub帐户的用户名是abc1234。并假设您的个人GitHub帐户的用户名是jack1234
并且,假设您已经创建了两个RSA密钥,即id_rsa_company和id_rsa_personal。因此,您的配置文件将如下所示:
# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company
# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal
现在,当您从公司的GitHub帐户克隆存储库 (名为demo)时,存储库URL将类似于:
Repo URL: git@github.com:abc1234/demo.git
现在,在执行时git clone
,您应该将上述存储库URL修改为:
git@company:abc1234/demo.git
请注意,现在如何将github.com替换为我们在配置文件中定义的别名“ company”。
同样,您必须根据配置文件中提供的别名来修改个人帐户中存储库的克隆URL。
foo:~$ssh-add ~/.ssh/xxx_id_rsa
确保在添加以下内容之前对其进行测试:
ssh -i ~/.ssh/xxx_id_rsa username@example.com
如果您对错误有任何疑问,有时更改文件的安全性将有所帮助:
chmod 0600 ~/.ssh/xxx_id_rsa
生成SSH密钥:
$ ssh-keygen -t rsa -C <email1@example.com>
产生another SSH key
:
$ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
现在,目录中应存在两个公用密钥(id_rsa.pub,accountB.pub)~/.ssh/
。
$ ls -l ~/.ssh # see the files of '~/.ssh/' directory
创建~/.ssh/config
具有以下内容的配置文件:
$ nano ~/.ssh/config
Host bitbucket.org
User git
Hostname bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Host bitbucket-accountB
User git
Hostname bitbucket.org
PreferredAuthentications publickey
IdentitiesOnly yes
IdentityFile ~/.ssh/accountB
从default
帐户克隆。
$ git clone git@bitbucket.org:username/project.git
从accountB
帐户克隆。
$ git clone git@bitbucket-accountB:username/project.git
我同意Tuomas关于使用ssh-agent的意见。我还想添加第二个私钥来工作,本教程对我来说就像是一种魅力。
步骤如下:
$ ssh-agent bash
$ ssh-add /path.to/private/key
例如 ssh-add ~/.ssh/id_rsa
$ ssh-add -l
$ssh -v <host url>
例如测试ssh -v git@assembla.com
ssh-agent
了多年,我最近切换到使用侏儒gnome-keyring
我的中i3
西医。原因很简单:Gnome的Keyring管理器自动处理添加和删除ssh密钥,而无需记住ssh-add
。此外,还提供了一个密码来解锁(为安全起见,在指定的时间超时)。给每个人自己。由于我在Arch上使用了gnome设置,因此在我的设置中即插即用。如果您是防侏儒,请忽略此评论。
我有两个Bitbucket帐户并想分别为两个帐户存储单独的SSH密钥时,就遇到了这个问题。这对我有用。
我创建了两个单独的ssh配置,如下所示。
Host personal.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
HostName bitbucket.org
User git
IdentityFile /Users/username/.ssh/work
现在,当我不得不从工作帐户克隆存储库时,命令如下。
git clone git@bitbucket.org:teamname/project.git
我必须将此命令修改为:
git clone git@**work**.bitbucket.org:teamname/project.git
同样,我个人帐户中的clone命令必须修改为
git clone git @ personal .bitbucket.org:name / personalproject.git
请参阅此链接以获取更多信息。
使用ssh-agent作为密钥。
在ubuntu 18.04上没有任何事可做。
成功创建第二个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
1.0 SSH配置文件
1.1创建〜/ .ssh / config
1.2 chmod 600〜/ .ssh / config(必须)
1.3在文件中输入以下内容:
寄送披萨
主机名github.com
PreferredAuthentications publickey#可选
IdentityFile〜/ .ssh / privatekey1
案例A:新鲜的GIT克隆
使用以下命令git clone:
$ git clone git @ pizza:yourgitusername / pizzahut_repo.git
注意:如果将来要更改.ssh / config的主机名“ pizza”,请进入git cloned文件夹,编辑.git / config文件的url行(请参阅案例B)
案例B:已经拥有Git克隆文件夹
2.1转到克隆的文件夹,然后转到.git文件夹
2.2编辑配置文件
2.3将网址从旧更新为新:
(Old) url = git@github.com:yourgitusername/pizzahut_repo.git
(New) url = git@pizza:yourgitusername/pizzahut_repo.git
在运行OpenSSH_5.3p1,OpenSSL 1.0.1e-fips的Centos 6.5上,我通过重命名密钥文件以使它们都不具有默认名称的方式解决了该问题。我的.ssh目录包含id_rsa_foo和id_rsa_bar,但没有id_rsa等。
正如atlassian博客页面上的seeend一样,在.ssh中 生成一个配置,其中包括以下文本:
#user1 account
Host bitbucket.org-user1
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user1
IdentitiesOnly yes
#user2 account
Host bitbucket.org-user2
HostName bitbucket.org
User git
IdentityFile ~/.ssh/user2
IdentitiesOnly yes
然后,您可以使用后缀域进行检出,并且在项目中可以在本地配置作者名称等。
您可以尝试使用此 sshmulti npm软件包来维护多个ssh密钥。
这是我从答案中得到启发的解决方案 @ sajib-khan得到。未设置默认配置,这是我在gitlab上的个人帐户,其他指定的是我的公司帐户。这是我做的:
ssh-keygen -t rsa -f ~/.ssh/company -C "name.surname@company.com"
nano ~/.ssh/config
Host company.gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/company
ssh-add -D
ssh -T git@company.gitlab.com
欢迎来到GitLab,@ hugo.sohm!
ssh -T git@gitlab.com
欢迎来到GitLab,@ HugoSohm!
公司帐号
$ git clone git@company.gitlab.com:group/project.git
个人/默认帐户
$ git clone git@gitlab.com:username/project.git
这里是源,我用,希望它能帮助!
我喜欢在〜/ .ssh / config中设置以下内容的方法:
# Config 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 repo works and sometimes the other depending on which key is used first.
# AddKeysToAgent yes
# I only use my private id file so all private repos don't need the env var `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
)。