Hub: `hub browse` fails with `ssh` remote

Created on 30 Apr 2019  路  9Comments  路  Source: github/hub

Hello,

if I try to use hub browse when my repo's remote is in https form - it works fine. However, if the repo's remote is in ssh, hub browse fails.

Even more specifically, it fails, if a browser session is already in use / opened (at least for google chrome)

  1. This works (both w/ open & closed browsers):
$ hub remote set-url origin https://github.com/sarpik/angular-learning.git
$ hub browse
[6330:6359:0430/195454.358191:ERROR:browser_process_sub_thread.cc(217)] Waited 3 ms for network service
Opening in existing browser session

Opens the repository.

  1. This does work if the browser is closed, but does not work if the browser is open.
$ hub remote set-url origin [email protected]:sarpik/angular-learning.git
$ hub browse

if a browser is already open, it throws this and opens a new empty window without the repository.

[13005:13034:0430/200211.701130:ERROR:browser_process_sub_thread.cc(217)] Waited 3 ms for network service
Opening in existing browser session.

otherwise, if the browser is not open, it does not display this error and opens the browser with the repository successfully.


My system:

$ uname -a
Linux arch-usb 5.0.9-arch1-1-ARCH #1 SMP PREEMPT Sat Apr 20 15:00:46 UTC 2019 x86_64 GNU/Linux

Google chrome:

$ pacman -Qe google-chrome
google-chrome 74.0.3729.108-1

more-info-needed

Most helpful comment

_Note_ that I've set the protocol to ssh in my $HOME/.config/hub file:

There's your bug: the protocol option here doesn't support "ssh". It defines the protocol to communicate with the GitHub API with, which can only be HTTPS and sometimes HTTP if communicating with a GitHub Enterprise instance.

I've done this because instead of entering my password + 2 FA token every time, I instead just use my ssh passphrase.

You literally only ever have to do this once after installing hub, then your credentials get converted to oauth_token in $HOME/.config/hub and then you never have to enter credentials again.

All 9 comments

Hi thank you for reporting! This is strange. There should be no difference when opening a repository that has an SSH remote compared to an HTTPS remote. The project url to open in the browser is identical:

$ git init
Initialized empty Git repository in /private/tmp/hub-test/.git/

$ hub remote add origin [email protected]:sarpik/angular-learning.git
$ hub browse -u
https://github.com/sarpik/angular-learning

$ hub remote set-url origin https://github.com/sarpik/angular-learning.git
$ hub browse -u
https://github.com/sarpik/angular-learning

I assume your system has either xdg-open or x-www-browser in PATH; hub will execute the first one found to open the resolved url. It doesn't itself communicate with a web browser on your system nor can it know whether the browser is already opened or not.

Are you on the latest version of hub, btw?

Try experimenting with skipping hub altogether and running something like this repeatedly in different scenarios:

$ xdg-open https://github.com/sarpik/angular-learning

Hello, no problem.

My hub version is up to date - I sync my arch packages automatically every 6 hours:D

$ hub --version
git version 2.21.0
hub version 2.11.2

The hub browse -u output after setting an ssh remote url is different from your output.

$ git init
Initialized empty Git repository in /home/kipras/temp/hub-ssh-bug-testing/.git/

$ hub remote add origin [email protected]:sarpik/angular-learning.git
$ hub browse -u
ssh://github.com/sarpik/angular-learning    # <--- this  is weird

$ hub remote set-url origin https://github.com/sarpik/angular-learning.git
$ hub browse -u
https://github.com/sarpik/angular-learning

I'm not sure if the ssh url is even valid. Shouldn't there be a : before the username + git@ before github.com?

Note that I've set the protocol to ssh in my $HOME/.config/hub file:

github.com:
- user: sarpik
  oauth_token: <oauth_token_hidden>
  protocol: ssh

I've done this because instead of entering my password + 2 FA token every time, I instead just use my ssh passphrase.


Regarding the $PATH variable - no, I don't think that I have neither xdg-open nor x-www-browser

$ echo $PATH | grep -i xdg    # no output

$ echo $PATH | grep -i xdg-open    # no output

$ echo $PATH | grep -i x-www-browser    # no output


Running xdg-open https://github.com/sarpik/angular-learning works as expected - both when a browser session is open and closed.


Anything else I could help with?

Edit:
If I set the url back to https, it works perfectly. Setting it back to ssh url brings back the buggies.

So if you're testing, don't forget to set it back to ssh :D

_Note_ that I've set the protocol to ssh in my $HOME/.config/hub file:

There's your bug: the protocol option here doesn't support "ssh". It defines the protocol to communicate with the GitHub API with, which can only be HTTPS and sometimes HTTP if communicating with a GitHub Enterprise instance.

I've done this because instead of entering my password + 2 FA token every time, I instead just use my ssh passphrase.

You literally only ever have to do this once after installing hub, then your credentials get converted to oauth_token in $HOME/.config/hub and then you never have to enter credentials again.

Hey, thanks @mislav!

I figured out that I need to set the ssh protocol inside my $HOME/.gitconfig like so:

[hub]
    protocol = ssh

and keep the https protocol inside $HOME/.config/hub:

github.com:
- user: sarpik
  oauth_token: <the_oauth_token>
  protocol: https

Thanks again:)

You literally only ever have to do this once after installing hub, then your credentials get converted to oauth_token in $HOME/.config/hub and then you never have to enter credentials again.

@mislav Hello again, I've discovered that hub somehow ignores the ~/.config/hub file's oauth_token parameter and does not work with https (this happens when 2FA is enabled).

  1. If the ~/.confih/hub file is NOT present, hub asks for the username, password, two-factor authentication code.
  2. Then saves them inside the ~/.config/hub file.
  3. But then proceeds to clone the repository & asks for the username & password again, and because 2FA is enabled - it fails.

If the file IS present, just skip step 1 and 2.

g is aliased as hub in the photo below; I try to clone from sarpik/stylus

~/.config/hub:

github.com:
- user: sarpik
  oauth_token: <oauth_token>
  protocol: https

~/.gitconfig:

<...>
[hub]
    protocol = https
$ uname -a
Linux arch-usb 5.1.2-arch1-1-ARCH #1 SMP PREEMPT Wed May 15 00:09:47 UTC 2019 x86_64 GNU/Linux

I also tried to create the access token myself, as mentioned in this tutorial from github, and placing it inside the ~/.config/hub file - hub doesn't seem to read it though.

If I input the token manually when prompted for the username & password - everything works just fine.

@sarpik It's weird that ~/.config/hub file wasn't read.

If I input the token manually when prompted for the username & password - everything works just fine.

Did you find out if that information was saved somewhere after you got prompted?

Do you have environment variables XDG_CONFIG_HOME or HUB_CONFIG present?

Do you have environment variable GITHUB_TOKEN present?

@sarpik Ah I see what is happening now. I've commented too soon.

After you got asked for two-factor authentication code, your GitHub API authentication info that hub uses got succcessfully stored into $HOME/.config/hub. Then it started cloning the repo via git.

You got prompted for username/password again by git's own HTTPS transport mechanism. That authentication is within git and completely separate from hub. You have to set up git credential caching separately and paste your Personal Access Token instead of password (unlike with hub, your actual GitHub password will not work here).

Sorry that this is all so confusing. In the future I would want to imagine hub helping you out with both its own authentication mechanism and that for git cloning.

@mislav Sorry for the late reply.
Yeah, that's confusing a little.

I noticed that on my Windows PC, I entered my credentials into git (without hub) once and they stay there forever - I never need to re-enter them.
git-bash must be using some sort of credential store I suppose.

On my arch linux laptop, I now am still continuing to use ssh, and I've started to use a credential store (there were many choices, I went with Keychain) - now I only need to input my ssh passphrase once per session login, so that helps.

Hopefully this process will be automated in the future - best of luck once again, and if I find something else useful, I'll be sure to notify ya'll.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

wwwdata picture wwwdata  路  3Comments

aryan9600 picture aryan9600  路  3Comments

cbeams picture cbeams  路  4Comments

kentcdodds picture kentcdodds  路  4Comments

dsifford picture dsifford  路  4Comments