.ssh / windows的配置文件(git)

时间:2014-10-08 21:28:45

标签: git ssh intellij-idea

我一直在寻找一个关于如何使用多个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。

5 个答案:

答案 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

  1. 打开文件夹C:\Users\[User]\.ssh

  2. 创建文件config(无文件扩展名)

  3. 在文本编辑器(如记事本)中打开文件,并为第一个远程主机和用户添加这些配置详细信息。保留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]
    
  4. 测试

  • 使用Bash(适用于Windows的Git)
    $ ssh -T git@[git.domain.com]
    Welcome to GitLab, @[User]!
    
  • 使用命令行(需要激活Win 10 OpenSSH Client)
    C:\Users\[User]>ssh -T git@[git.domain.com]
    Welcome to GitLab, @[User]!
    
  1. 要进行故障排除,请使用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连接或推送)。