【问题标题】:What to do about "PTY allocation request failed on channel 0"如何处理“通道 0 上的 PTY 分配请求失败”
【发布时间】:2011-04-20 03:40:12
【问题描述】:

我无法为 GitHub 创建一个 ssh 密钥。我让它工作了很长一段时间,但我不知道发生了什么变化。我已经从我的 GitHub 帐户中删除了以前的 SSH 密钥。在按照说明多次生成 SSH 密钥 (http://help.github.com/mac-key-setup) 并测试“ssh git@github.com”后,我得到以下信息;

PTY 分配请求失败于 频道 0 错误:嗨...成功 经过身份验证...GitHub没有 提供外壳访问...连接到 github.com 已关闭。

我查看了troubleshooting guide 并注意到我的 ssh 目录没有配置文件。创建它后,我不确定在 IdentityFile 行上输入什么或如何输入本地路径。我什至不确定在我的情况下这是否必要?

如果你的 github 认证 信息与您的不同 机器帐户信息,您将 需要修改你的 ssh 配置 文件。

在以下位置创建或打开文件 ~/.ssh/config 添加以下行:

Host github.com
    User git
    Hostname github.com
    PreferredAuthentications publickey
    IdentityFile [local path to private key half of github public key you provided]

您可能还需要更新 对您的 .ssh 文件夹的权限和 它的内容。 SSH 应用程序将 忽略太多的秘密文件 允许的。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/*

我还运行了 ssh -v git@github.com,其结果可以在这里看到 http://gist.github.com/607283 与我所知道的没什么不同。

知道我做错了什么吗?

【问题讨论】:

  • 使用命令行 ssh 登录不提供正常交互访问的服务时,“PTY 分配请求失败”警告是无害的。 Git-over-SSH 不需要 tty 并且 GitHub 的 SSH 服务被配置为拒绝为传入连接分配一个。你可以告诉ssh不要用ssh -T git@github.com请求一个tty。正如下一条消息所说,您的身份验证工作正常。您在实际使用 Git 通过 SSH 访问 GitHub 时遇到任何问题吗?
  • 谢谢克里斯——我听过的最好的解释。我理解你评论的第一部分。我想相关的问题是,当我尝试创建一个新的存储库和“git push origin master”时,我返回以下“错误:myemail@address.com/myapp 的权限拒绝 myusername。致命:远程端意外挂断“所以我不确定我在这个过程中的哪个地方失败了......我认为这是我的 ssh 密钥。我应该按照您的建议继续尝试 ssh -T git@github.com 吗?
  • 我们看到了“successfully authenticated”的信息,所以没有必要继续尝试直接ssh进入GitHub。我提到了-T 选项来证明“PTY 分配”消息并不表示硬故障(无论您是否使用-T 运行,您都会收到相同的“成功验证”消息)。我会在答案中写更多关于真正问题的内容。
  • 另外,在回复 cmets 时,如果您以“@username”(details on MSO)开始您的评论,那么指定的人将更有可能注意到您的评论。如果我没有回来检查这个问题,我会错过你的评论。
  • 我的区别是ssh -t vs ssh -T

标签: github ssh-keys


【解决方案1】:

正如问题的 cmets 中所述,“PTY 分配请求失败”是关于 GitHub 身份验证的红鲱鱼(这是尝试以交互方式登录 GitHub 的结果,而他们提供的唯一 SSH 服务是非交互式 Git-over-SSH;身份验证有效,只是不提供交互式“shell”服务)。


提问者在评论中写道:

我想相关的问题是,当我尝试创建一个新的存储库和“git push origin master”时,我返回以下“错误:对 myemail@address.com/myapp 的权限拒绝 myusername。致命:远程端意外挂断”

这似乎更有可能是实际问题。这似乎表明名为 origin 的远程未配置为正确指向 GitHub 存储库。

检查git remote show -n origin 的输出。可能“获取 URL”和“推送 URL”是相同的。它们都应该是这样的:

git@github.com:git-user-name/repository-name

在网络上登录 GitHub 时,您可以使用您帐户的用户名或其关联的电子邮件地址。推送到存储库(或从私有存储库获取)时,您必须使用您的实际用户名(电子邮件地址不起作用)。看起来您在那里使用的是您的电子邮件地址,而不仅仅是您的 GitHub 用户名。要解决此问题,请重新配置遥控器的 URL:

git remote set-url origin git@github.com:github-username/repository-name

登录后,您的用户名会显示在 GitHub 网页上的许多位置。最容易找到它的位置是在您的 gravatar 和页面标题上的“仪表板”链接之间(如果您没有配置 gravatar)。同一位置链接到您的公开个人资料页面;此页面的 URL 也应以您的用户名结尾。

【讨论】:

  • @chris-johnsen 当我在正确的目录中时,我按照指示输入了“git remote set-url origin...”,但返回的是“error: Unknown subcommand: set-url”并为 git remote 提供替代命令,这些命令似乎都不相关。是否有可能我需要使用“git config --global user.name myusername 和 git config --global user.email myemail@mail.com”?
  • @Shawn:啊,git remote set-url 仅在 Git 1.7.0 及更高版本中。只需执行git config remote.origin.url 'git@github.com:github-username/repository-name' 或使用git config -e(1.6.3 及更高版本;或仅vim .git/config ☺)编辑配置。 user.nameuser.email 值仅在提交时使用,而不是在推送时使用。
  • @chris-johnsen 感谢您的所有帮助和耐心。您提供的背景有助于澄清我无法沟通的问题。这是我意识到并整理出来的...1.) 删除了原始存储库,2.) 升级到最新版本的 Git,3.) 与您的 cmets、RailsTutorial.org 指南、Pro Git 和 GitHub 存储库创建并行说明 当我执行 git config --global user.name "my username" 和 4.) 最终能够推送到 GitHub 时,我意识到我输入了错误的用户名!再次感谢您的帮助!
  • 我希望我能投票两次。我开始知道 ssh 是如何工作的 github,并通过“ssh -T git@github.com”成功。然后听取他们关于如何配置我的远程“git remote add origin github.com/username/repo.git”的建议,当然这是 https 语法,而不是 ssh。 Github 应该注意到这一点,或者我应该停止在自动驾驶仪上打字,或两者兼而有之。
猜你喜欢
  • 1970-01-01
  • 2018-03-23
  • 2017-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多