我一直在寻找一个关于如何使用多个ssh密钥的解决方案,我发现它可以在.ssh目录中使用配置文件,但它在Windows上不起作用。
我的问题是我使用私钥访问git服务器,所以它看起来像这样: ssh://git@example.com/directory,当我使用TortoiseGit时它工作正常,因为有可能选择私钥。
但我想在我的IntelliJ IDEA中使用git rep,只有选择使用git native shell,如果我将名为id_rsa的密钥放入.ssh文件夹,它也可以使用。现在我想使用多个ssh密钥(因此我的密钥将获得名称“id_rsa_test”,因此如何在Windows下配置.ssh / config文件,它是否适用于通常的git服务器?
我发现的大多数例子都只适用于github。
答案 0 :(得分:18)
如果您使用“Git for Windows”
>cd c:\Program Files\Git\etc\ssh\
添加到ssh_config以下:
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_test
PS。你需要ssh版本> = 7.2 (发布日期2016-02-28)
答案 1 :(得分:4)
您可以在IdentityFile
文件中使用选项~/.ssh/config
,并为每个主机指定密钥文件。
Host host_with_key1.net
IdentityFile ~/.ssh/id_rsa
Host host_with_key2.net
IdentityFile ~/.ssh/id_rsa_test
更多信息:http://linux.die.net/man/5/ssh_config
另请参阅http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/
答案 2 :(得分:4)
这些说明在Linux中运行良好。在Windows中,它们今天不适合我。
我找到了一个对我有帮助的答案,也许这会对OP有所帮助。我吻了很多青蛙试图解决这个问题。您需要使用" ssh-add"添加新的非标准命名密钥文件。这是魔法子弹的指令:Generating a new SSH key and adding it to the ssh-agent。一旦你知道魔术搜索术语是"用windows中的ssh-add添加密钥"你找到了很多其他的链接。
如果我经常使用Windows,我会找到一些方法来永久使用Windows。 https://github.com/raeesbhatti/ssh-agent-helper
ssh密钥代理查找默认" id_rsa"和它知道的其他钥匙。必须将使用非标准名称创建的密钥添加到ssh密钥代理。
首先,我在Git BASH shell中启动密钥代理:
$ eval $(ssh-agent -s)
Agent pid 6276
$ ssh-add ~/.ssh/Paul_Johnson-windowsvm-20180318
Enter passphrase for /c/Users/pauljohn32/.ssh/Paul_Johnson-windowsvm-20180318:
Identity added: /c/Users/pauljohn32/.ssh/Paul_Johnson-windowsvm-20180318 (/c/Users/pauljohn32/.ssh/Paul_Johnson-windowsvm-20180318)
然后我切换到我想要克隆repo的目录
$ cd ~/Documents/GIT/
$ git clone git@git.ku.edu:test/spr2018.git
Cloning into 'spr2018'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
我和他一起战斗了很长时间。
以下是我沿途尝试的其他事情
起初我确定这是因为文件和文件夹权限。在Linux上,如果文件夹未设置为700,我看到.ssh设置被拒绝.Windows有711.在Windows中,我找不到任何方式来制作权限700.
与之抗争后,我认为一定不是问题。这就是原因。 如果密钥名为" id_rsa"然后git工作! Git能够连接到服务器。但是,如果我将密钥文件命名为其他东西,并以一致的方式修复配置文件,无论如何,那么git无法连接。这让我觉得权限不是问题。
你可以做的调试这个问题的方法是看详细 使用配置的密钥从ssh命令输出。
在git bash shell中,运行此
$ ssh -T git@name-of-your-server
注意,用户名应为" git"这里。如果你的密钥设置好了 找到配置文件,你看到了这个,因为我刚刚在我的Linux系统中测试过:
$ ssh -T git@git.ku.edu
Welcome to GitLab, Paul E. Johnson!
另一方面,在Windows中,我在应用" ssh-add"之前遇到同样的问题。它需要git的密码,这总是一个失败。
$ ssh -T git@gitlab.crmda.ku.edu
git@gitlab.crmda.ku.edu's password:
再次,如果我手动将我的密钥复制到" id_rsa"和" id_rsa.pub",然后这工作正常。运行ssh-add后,观察Windows Git BASH中的胜利:
$ ssh -T git@gitlab.crmda.ku.edu
Welcome to GitLab, Paul E. Johnson!
如果你在这里,你会听到我高兴地跳舞的声音。
要弄清楚出了什么问题,我可以运行' ssh'用" -Tvv"
在Linux中,我看到它成功了:
debug1: Offering RSA public key: pauljohn@pols124
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug2: input_userauth_pk_ok: fp SHA256:bCoIWSXE5fkOID4Kj9Axt2UOVsRZz9JW91RQDUoasVo
debug1: Authentication succeeded (publickey).
在Windows中,如果失败,我会看到它寻找默认名称:
debug1: Found key in /c/Users/pauljohn32/.ssh/known_hosts:1
debug2: set_newkeys: mode 1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 4294967296 blocks
debug2: key: /c/Users/pauljohn32/.ssh/id_rsa (0x0)
debug2: key: /c/Users/pauljohn32/.ssh/id_dsa (0x0)
debug2: key: /c/Users/pauljohn32/.ssh/id_ecdsa (0x0)
debug2: key: /c/Users/pauljohn32/.ssh/id_ed25519 (0x0)
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_rsa
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_dsa
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/pauljohn32/.ssh/id_ed25519
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
git@gitlab.crmda.ku.edu's password:
这是我需要的提示,它说它找到我的〜/ .ssh / config文件,但从未尝试过我希望它尝试的密钥。
我很长一段时间只使用Windows一次,这令人沮丧。也许那些一直使用Windows的人解决这个问题而忘了它。
答案 3 :(得分:3)
您可以在Windows 10上使用多个ssh键,并指定允许的访问类型。
假设您已经创建了ssh安全密钥,并将它们存储在C:\ Users \ [User] \。ssh
打开文件夹C:\Users\[User]\.ssh
创建文件config
(无文件扩展名)
在文本编辑器(如记事本)中打开文件,并为第一个远程主机和用户添加这些配置详细信息。保留CMD和BASH路径,或仅选择一种格式。然后将其复制并粘贴到下面以用于其他主机/用户组合,并根据需要进行修改。保存文件。
Host [git.domain.com]
User [user]
Port [number]
IdentitiesOnly=yes
PreferredAuthentications publickey
PasswordAuthentication no
# CMD
IdentityFile C:\Users\[User]\.ssh\[name_of_PRIVATE_key_file]
# BASH
IdentityFile /c/Users/[User]/.ssh/[name_of_PRIVATE_key_file]
测试
$ ssh -T git@[git.domain.com]
Welcome to GitLab, @[User]!
C:\Users\[User]>ssh -T git@[git.domain.com]
Welcome to GitLab, @[User]!
ssh -Tv git@[git.domain.com]
(或将-Tvv
或-Tvvv
用于较高的详细程度)。答案 4 :(得分:1)
对我来说,我只能在Windows的config
目录的Linux系统上添加目录~/.ssh/config
上的c:\Program Files\Git\etc\ssh\
文件。
在那之后,我能够使用我通常在Linux上使用的所有别名和设置(通过Git Bash上的SSH通过SSH连接或推送)。