为 Git 指定 SSH 端口

Jam*_*ard 28 ssh git

我连接到的大多数服务器都使用非标准 ssh 端口 (1234)。所以在我的 ssh 配置文件中,我有:

Port 1234
Run Code Online (Sandbox Code Playgroud)

但是 github.com 使用端口 22。当我尝试连接到 github 时,它显然尝试使用端口 1234。现在我必须编辑我的 ssh 配置才能使事情正常工作。

这是我的 git 配置中的一个片段:

[remote "origin"]
        url = git@github.com:asdf/asdf.git
Run Code Online (Sandbox Code Playgroud)

daf*_*aff 35

看看如何正确设置您的~/.ssh/config文件(man 5 ssh_config)。您可以轻松地为不同的主机指定不同的设置。为了解决你的问题,你会设置

Host github.com
Port 22
Host *
Port 1234
Run Code Online (Sandbox Code Playgroud)

请查看 ssh_config 手册页,它在前几页解释了您需要了解的所有内容。


Chr*_*sen 35

在 in 中设置一个部分~/.ssh/config是一个很好的解决方案,但了解另一种方法可能会很有用。

常见的类似scp的语法user@host:path没有用于端口的地方,但 Git 也支持ssh:可用于指定端口的URL 方案:

ssh://git@github.com:22/asdf/asdf.git
Run Code Online (Sandbox Code Playgroud)

虽然ssh:URL 支持端口规范,但它不支持相对路径(例如,没有直接等效于where不以斜杠开头的类似scp的语法)。user@host:pathpath

GitHub 以相同的方式对待相对路径和绝对路径,因此它适用于它们,但它可能不适用于所有基于 SSH 的 Git 存储库。对于简单的基于 SSH 的托管,您可能需要插入/home/username//Users/username/从相对路径切换到绝对路径。一些托管系统可能根本不处理绝对路径(尽管我倾向于将这种缺乏支持称为错误)。


Ale*_*lex 6

尝试连接到我的 git 服务器时遇到类似问题

(在 docker 容器中有一个gitea服务器,ssh 端口配置为2022,而不是标准 22,这里作为示例my-git-server.lan)。

  1. 创建 ssh 密钥对(安静,无密码)
$ ssh-keygen -q -N '' -b 4096 -f ~/.ssh/mykeyfile
Run Code Online (Sandbox Code Playgroud)

(这将创建两个文件: private-keymykeyfile和 public-key mykeyfile.pub

  1. 显示公钥的内容并将其复制/粘贴到 git 服务器中您的个人资料的 SSH 密钥(类似于在Github上执行此操作的方式)
$ cat ~/.ssh/mykeyfile.pub
Run Code Online (Sandbox Code Playgroud)
  1. 将以下行添加到 ssh-config 以指定 git-server 的主机名、端口和密钥文件
$ nano ~/.ssh/config
Host my-git-server.lan
  HostName my-git-server.lan
  User git
  Port 2022
  IdentityFile ~/.ssh/mykeyfile
Run Code Online (Sandbox Code Playgroud)

(请注意,无论您在 git 服务器上的实际用户名如何,用户名始终为 ) git

  1. 使用公钥测试与 git 服务器的 ssh 连接,.. 并收到成功消息
$ ssh -T git@my-git-server.lan
Run Code Online (Sandbox Code Playgroud)

(再次注意,用户名始终 git是)

  1. 指定本地 git 存储库的远程地址ssh://git@my-git-server.lan:2022/alex/myproject.git(再次注意用户git和端口2022),..检查远程配置
$ 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
Run Code Online (Sandbox Code Playgroud)

(在这里您还可以看到,在我的 git 服务器上,我的实际用户是alex,存储库是myproject

完毕!您现在可以使用 git-server .. fetch/commit/push 等。


Jam*_*ard 5

(当我提出问题后立即找到答案时,我喜欢它。)

我修改了我的 ssh 配置以指定每个主机的端口而不是全局设置:

Host asdf.com
    Port 1234

Host github.com
    User git
    Hostname github.com
    Port 22
Run Code Online (Sandbox Code Playgroud)