将ssh密钥复制到另一台计算机上,以便可以在其中使用GitHub?


12

我有一个远程服务器。我已经可以成功将ssh切换到该远程服务器上了-我的密钥位于authorized_keys该远程服务器上。

现在,我想直接从GitHub拉到该远程服务器。但是permission denied (publickey)当我尝试ssh -T git@github.com在远程服务器上时,我得到了。

我应该id_rsa.pub直接从本地计算机复制到远程服务器,还是那样危险?

如果这是答案,那么最好的方法是什么?

还是我应该在远程服务器上生成一个新的公钥,并将其添加到我的github acocount?

更新:

这是冗长的ssh的输出:

~$ ssh -Tv git@github.com
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to github.com [192.30.252.131] port 22.
debug1: Connection established.
debug1: identity file /home/richard/.ssh/id_rsa type -1
debug1: identity file /home/richard/.ssh/id_rsa-cert type -1
debug1: identity file /home/richard/.ssh/id_dsa type -1
debug1: identity file /home/richard/.ssh/id_dsa-cert type -1
debug1: identity file /home/richard/.ssh/id_ecdsa type -1
debug1: identity file /home/richard/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/richard/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

我刚刚尝试使用服务器的IP地址设置ssh代理转发:developer.github.com/guides/using-ssh-agent-forwarding但是我仍然Permission denied (publickey)在远程计算机上。
理查德(Richard)

1
ssh命令上有一个详细选项,我认为这可能会告诉您它实际上正在尝试使用哪些密钥文件,这对我有所帮助。
2015年

Answers:


4

id_rsa.pub可以在任何地方没有任何真正的危险,它被复制。这是您的公钥,适用于诸如此类的事情。它是密钥对的一半,并且与您要访问的位置共享它是您允许私钥起作用的方式。

为了允许远程登录,您的公钥需要在authorized_keysauthorized_keys2在某些系统上)中列出。每行一键,采用以下格式:

ssh-rsa AAAIHAVEREMOVEDTHEMAJORITYOFTHEKEYBECAUSEISEENONEEDTOPOSTTHATWALLOFTEXTHERE9yfRjxw== jarmund@jarmint

为此,将其复制完后,只需将其添加到authorized_keys文件中,如下所示:cat id_rsa.pub >> ~/.ssh/authorized_keys

如果.ssh文件夹的权限过于宽松,大多数理智的系统都会胆怯地拒绝允许您使用基于密钥的登录。该文件夹应该为700,因此,如果您仍然遇到问题:chmod 700 ~/.ssh

此外,该.ssh文件夹中的文件应为600:chmod 600 ~/.ssh


编辑1:

id_rsa.pub远程服务器上本身不需要文件本身。仅作为的一部分的内容authorized_keys。我建议运行ssh -vT git@github.com以启用详细日志记录,以便您可以准确查看它抱怨的权限。

编辑2:

这意味着所提供的密钥均与远程服务器上的文件不匹配。您想看到的是这样的:

debug1: Offering RSA public key: /home/jarmund/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535

检查事项:

  • 确保其中一个私钥与您添加到遥控器的公钥相匹配。 authorized_keys
  • 确保密钥与您尝试登录时使用的用户名匹配(应该是公用密钥的最后一部分)
  • 尝试重命名authorized_keysauthorized_keys2

谢谢。我的公钥列在~/.ssh/authorized_keys远程服务器上-我已使用添加它cat ~/.ssh/id_rsa.pub | ssh me@server "cat >> ~/.ssh/authorized_keys"。然后散落到远程并运行~$ chmod 700 ~/.ssh$ chmod 600 ~/.ssh/authorized_keys但是Permission denied (publickey)当我尝试ssh到github时仍然可以。我是否也应该将整个id_rsa.pub文件复制到远程计算机上?
理查德(Richard)

@Richard您不需要那里的文件本身,不需要。尽管我喜欢将其保存在.ssh文件夹中,以防万一我需要它。但这不是必需的,这只是我要做的事情。我建议ssh您使用-v交换机运行问题中描述的命令,以准确查看ssh抱怨的权限。
Jarmund

感谢您的编辑2。我不确定如何做第一个要点check that one of the private keys...--我应该在这里做什么?
理查德

关于第2点,您是说密钥应该与我的GitHub用户名匹配吗?它看起来好像不像:)
理查德(Richard)

关键是我可以使用相同的公钥从本地计算机上ssh到ssh并从GitHub中拉出,所以GitHub必须认为这还可以...?
理查德

2
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

根据您的调试跟踪,这些密钥文件实际上都不存在于本地系统上,并且ssh实际上并未向远程服务器提供任何密钥。确保要使用的密钥实际上在运行ssh的主机上存在,并且该文件具有正确的名称。如果要使用默认文件之一以外的密钥文件,则必须在ssh命令行上指定它:

ssh -i /path/to/some_key -Tv git@github.com

密钥文件在我尝试从ssh到github的远程服务器上不存在,但是在中authorized_keys。这够了吗?还是我也需要在那边复制密钥文件?
理查德

1
authorized_keys公共将为接受钥匙进入的连接。您需要私钥文件的副本才能建立与另一台主机的传出连接。因此,是的,这些关键文件之一(id_rsa等)必须存在于运行ssh的主机上。
Kenster 2015年

-i标志帮助我解决了一个问题!我将ssh文件夹复制到另一台计算机,并尝试使用远程git,但被拒绝。-i保存了这一天!
pauljohn32 '17

2

服务器需要您的私钥才能向Github进行身份验证。顾名思义,您的公共密钥被视为公共密钥,因此不足以进行身份​​验证。

如果不需要通过ssh进行连接就无需在远程服务器上使用Github,则应使用ssh-agent转发。可以在Github上找到关于它的指南:https : //developer.github.com/guides/using-ssh-agent-forwarding/

否则,您应该生成一个新密钥并将其链接到您的帐户。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.