47
votes

I can't see to wrap my head creating an ssh key for GitHub. I had it working quite awhile back but I can't figure out what has changed. I've since removed the previous SSH keys from my GitHub account. After following the instructions several times for generating an SSH key (http://help.github.com/mac-key-setup) and testing "ssh [email protected]" I get the following;

PTY allocation request failed on channel 0 ERROR: Hi...successfully authenticated...GitHub does not provide shell access...Connection to github.com closed.

I reviewed the troubleshooting guide and noticed that my ssh directory didn't have a config file. After creating it I'm unsure of what or how to enter the local path on the IdentityFile line. I'm not even sure whether this is necessary in my case?

If your github authentication information is different from your machine account information, you’ll need to modify your ssh configuration file.

Create or open the file at ~/.ssh/config Add the following lines:

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

You may also need to update the permissions on your .ssh folder and its contents. The SSH application will ignore secret files that are too permissive.

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

I also ran ssh -v [email protected] the results of which can be seen here http://gist.github.com/607283 nothing different from what I can tell.

Any idea what I'm doing wrong?

1
The “PTY allocation request failed” warning is innocuous when using command-line ssh to login to a service that does not provide normal interactive access. Git-over-SSH does not need a tty and GitHub’s SSH service is configured to refuse to allocate one for incoming connections. You can tell ssh not to ask for a tty with ssh -T [email protected]. As the next message says, your authentication is working fine. Are you having any problems actually using Git to access GitHub over SSH?Chris Johnsen
Thanks Chris - best explanation I've heard yet. I understand the first part of your comment. I guess the related problem is that when I try to create a new repository and "git push origin master" I return the following "Error: Permission to [email protected]/myapp denied to myusername. Fatal: the remote end hung up unexpectedly" So I'm not sure where in the process I'm failing...I thought it was my ssh key. Should I continue to try the ssh -T [email protected] as you suggested?Shawn
We see the “successfully authenticated” message, so there is no need to continue to try to directly ssh into GitHub. I mentioned the -T option to demonstrate that the “PTY allocation” message does not indicate a hard failure (you get the same “successfully authenticated” message whether you run with -T or not). I will write more about the real problem in an answer.Chris Johnsen
Also, when replying to comments, if you begin your comment with “@username” ( details on MSO ), then the indicated person will be more likely to notice your comment. I would have missed your comment if I had not come back to check on this question.Chris Johnsen
Difference for me was ssh -t vs ssh -Tsarink

1 Answers

39
votes

As described in the comments on the question, the “PTY allocation request failed” is a red herring with respect to GitHub authentication (it is the result of trying to interactively login to GitHub when the only SSH service they offer is non-interactive Git-over-SSH; the authentication is working, they just do not provide interactive, “shell” service).


The person who asked the question wrote this in a comment:

I guess the related problem is that when I try to create a new repository and "git push origin master" I return the following "Error: Permission to [email protected]/myapp denied to myusername. Fatal: the remote end hung up unexpectedly"

This seems more likely to be the actual problem. This seems to indicate that the remote named origin not configured to correctly point to a GitHub repository.

Check the output of git remote show -n origin. Probably the “Fetch URL” and the “Push URL” are the same. They should both look like this:

[email protected]:git-user-name/repository-name

When logging into GitHub on the web you can use either your account’s username or its associated email address. When pushing to repositories (or fetching from private repositories) you have to use your actual username (an email address will not work). It looks you are using your email address in there instead of just your GitHub username. To fix this, reconfigure the remote’s URL:

git remote set-url origin [email protected]:github-username/repository-name

Your username is displayed in many places on the GitHub web pages once you are logged in. The easiest place to find it is between your gravatar and the “Dashboard” link on the page header (you will see a silhouette icon if you do not have a gravatar configured). That same location links to your public profile page; this page’s URL should also end in your username.