ChatGPT解决这个技术问题 Extra ChatGPT

git remote add with other SSH port

In Git, how can I add a remote origin server when my host uses a different SSH port?

git remote add origin ssh://user@host/srv/git/example

m
minimalpop

You can just do this:

git remote add origin ssh://user@host:1234/srv/git/example

1234 is the ssh port being used


Thx. Just a complement : in the path part, use absolute path, not a relative path to user home directory...
@Snicolas : Why shall one not use a relative path?
@Sincolas It works if you have the repo in the users home directory: /home/someuser/git-repos/example.git --> ssh://someuser@:/~/git-repos/example.git . btw: you get a .git repo by git clone --bare
@Jameo It is an absolute path.
Note that it will not work if you remove the protocol. i.e if you try the following, it will not work. git remote add origin user@host:1234/srv/git/example
b
bramp

You need to edit your ~/.ssh/config file. Add something like the following:

Host example.com
    Port 1234

A quick google search shows a few different resources that explain it in more detail than me.


It did work for me. I like this approach better than sticking it in the git remote. Thanks! No need to specify an absolute path either this way.
This works great. Also that way I can have a specific key instead of the default id_rsa. Not only that, my server is picky and more or less you have to have it right quickly enough which fails if you include password. So I use the PasswordAuthentication no as well.
It's better to have it in the remote than hiding it in the config file like this: when you have everything in just one place you can never forget about the different port number and you can simply copy and paste the URL for anyone else to use.
@MarcH It actually depends upon the situation. I like to use random port numbers on on my VPS instances. Having the port inside the config file is one way you can withhold that information from collaborators (That's when you have multiple remotes, the deployment remote host is different from the internal Source Code repo).
@RagunathJawahar I don't think using random port numbers is a very common use case.
k
kujiy

Best answer doesn't work for me. I needed ssh:// from the beggining.

# does not work
git remote set-url origin user@example.com:10000/aaa/bbbb/ccc.git
# work
git remote set-url origin ssh://user@example.com:10000/aaa/bbbb/ccc.git

Debian 10 working in another ssh port. Testing ssh -T git@github.com got Error connection time out. Then this setup git remote set-url origin git@github.com:22/USER/REPOSITORY.git fix the problem. Thanks Kujiy!
K
Konrad Rudolph

Rather than using the ssh:// protocol prefix, you can continue using the conventional URL form for accessing git over SSH, with one small change. As a reminder, the conventional URL is:

git@host:path/to/repo.git

To specify an alternative port, put brackets around the user@host part, including the port:

[git@host:port]:path/to/repo.git

But if the port change is merely temporary, you can tell git to use a different SSH command instead of changing your repository’s remote URL:

export GIT_SSH_COMMAND='ssh -p port'
git clone git@host:path/to/repo.git # for instance

Adding the square brackets around the git@host:port worked beautifully for me. I am using gitlab and on that server it requires a non standard port but I also cannot use the absolute path to the repo (I don't know it). Thank you
This seems like the most flexible method to me as it supports relative paths and doesn't rely on ssh configs
Ehm, it's GIT_SSH_COMMAND, check this out git-scm.com/docs/git
While adding it as a remote using git remote add, I had to wrap the URL in double quotes to have this syntax work. Like so: git remote add gitea "[git@host:port]:path/to/repo.git"
@raisinrising That’s unrelated to Git, it depends on the shell you’re using. For sh/Bash/… the quotes are not necessary here.
E
Evan Carroll

For those of you editing the ./.git/config

[remote "external"]                                                                                                                                                                                                                                                            
  url = ssh://evanc@www.foo.com:11720/aaa/bbb/ccc                                                                                                                                                                                                               
  fetch = +refs/heads/*:refs/remotes/external/* 

Perfect. One question though, how do I do this for submodules? It does not seem to work.
n
nobjta_9x_tq

for gitlab, example ssh port is 2224, therefore:

git remote add ssh://git@192.168.1.100:2224/your_group/your_project.git


A
Alex

Had a similar issue trying to connect to my git server

( have a gitea server in a docker container with ssh-port configured to 2022, instead of standard 22, here as an example my-git-server.lan ).

create ssh key-pair (quiet, without password)

$ ssh-keygen -q -N '' -b 4096 -f ~/.ssh/mykeyfile

(this will create two files: public-key mykeyfile.pub and private-key mykeyfile without any extension)

display contents of the public-key and copy/paste it to your profile's SSH keys in your git-server (similar to how you would do it on Github )

$ cat ~/.ssh/mykeyfile.pub

add following lines to ssh-config to specify git-server's hostname, port and key-file

$ nano ~/.ssh/config
Host my-git-server.lan
  HostName my-git-server.lan
  User git
  Port 2022
  IdentityFile ~/.ssh/mykeyfile

(notice that the username is always git, regardless of your actual username on your git-server)

test ssh connection to your git-server using public-key, .. and receive a success message

$ ssh -T git@my-git-server.lan
Hi there, username! You've successfully authenticated with the key named /Users/username/.ssh/mykeyfile.pub

.. use -v "verbose mode" to analyse any errors:

$ ssh -Tvvv git@my-git-server.lan

(again, notice that the username is always git)

specify your remote address ssh://git@my-git-server.lan:2022/alex/myproject.git for your local git repository (again, notice the user git and the port 2022), .. check remote configuration

$ cd your/local/git/repository/folder
$ git remote add my-git-server ssh://git@my-git-server.lan:2022/alex/myproject.git
$ git remote -v

( here you also see that on my git-server my actual user is alex and repository is myproject )

Done! You can now work with your git-server .. fetch/commit/push etc.

( this is a copy of my post on serverfault.com )

Update: as rightly noted in the comments - you do not necessarily need to specify port 2022 in the remote-url, since it is already configured in ~/.ssh/config file as PORT 2022.


Thank you this works great. One little thing, I did not need to add the PORT to the remote URL. Just create the host in ~/.ssh/config and it automatically will use the port specified there
B
Baach

Just have a look at how to set up your ~/.ssh/config file correctly.

You can specify different settings for different hosts easily.

To solve your problem you would set

Host github.com 
Port 22 
Host * 
Port 1234

Have a look at the ssh_config manual page, it explains everything you need to know on the first few pages.


W
Whu_Kingsun

1.git remote add ${shortname} ${url}

2.git remote remove shortname (is remove a remote)

3.git remote -v (is to see your current remote list)

4.git push remote branch

5.git remote rename A B (rename A to B)

6.git remote show shortname (show remote info)

All this works for me.