自定义SSH端口远程服务器的Git无密码配置及克隆推送问题
搞定自定义SSH端口的远程Git服务器搭建+无密码操作方案
我来帮你一步步解决这个问题——从搭建适配自定义SSH端口的远程Git服务器,到实现完全无密码的Git操作,全程给你理清楚:
一、先在远程服务器创建Git裸仓库
既然你有root权限,咱们先找个干净的目录放仓库,比如/opt/git,避免和系统文件混在一起:
# 创建仓库根目录 mkdir -p /opt/git cd /opt/git # 创建空的裸仓库(裸仓库没有本地工作目录,专门用来做远程仓库) git init --bare my-project.git # 调整权限确保Git能正常读写(用root的话直接给root权限就行) chown -R root:root my-project.git chmod -R 755 my-project.git
二、让本地Git适配远程的自定义SSH端口
因为远程用的不是默认22端口,总每次输端口太麻烦,给你两种解决方式:
方式1:临时指定端口(适合偶尔用)
clone的时候直接在地址里加端口:
git clone ssh://root@你的服务器IP:自定义端口/opt/git/my-project.git
push的时候也要带端口,但这种方式每次都输,推荐用下面的永久配置。
方式2:修改本地SSH配置(一劳永逸)
编辑本地的SSH配置文件,没有的话就新建一个:
touch ~/.ssh/config vim ~/.ssh/config
把下面内容加进去(替换成你的服务器信息):
Host my-git-server HostName 你的服务器IP User root Port 你的自定义端口号
保存后一定要给配置文件设对权限,不然SSH会报错:
chmod 600 ~/.ssh/config
之后你就可以用my-git-server代替一大串地址了,比如clone命令简化成:
git clone my-git-server:/opt/git/my-project.git
三、配置SSH无密码登录(解决push/clone要输密码的问题)
1. 本地生成SSH密钥对(没有的话才需要)
在本地终端执行:
ssh-keygen -t ed25519 # ed25519是更安全的加密算法,老系统不支持的话换rsa # 一路回车就行,别设置密钥密码,不然还是要输密码,达不到无密码效果
2. 把本地公钥传到远程服务器
最简单的方式用ssh-copy-id,指定端口就行:
ssh-copy-id -p 你的自定义端口 root@你的服务器IP
如果ssh-copy-id不支持指定端口,就手动复制:
- 本地执行
cat ~/.ssh/id_ed25519.pub,复制输出的公钥内容 - 远程服务器执行:
mkdir -p ~/.ssh echo "刚才复制的公钥内容" >> ~/.ssh/authorized_keys # 权限必须设对,否则SSH会拒绝登录 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
四、测试Git操作是否正常
现在来验证一下:
# 克隆远程仓库到本地 git clone my-git-server:/opt/git/my-project.git cd my-project # 创建测试文件并提交 echo "测试内容" > README.md git add README.md git commit -m "第一次提交测试" # 推送到远程 git push origin main
如果一切顺利,push的时候不会要求输入密码,远程仓库也能收到你的提交。
踩坑排查指南
如果还是连不上,先排查SSH连接:执行ssh my-git-server,看能不能无密码登录。如果SSH连不上,检查这几点:
- 远程服务器防火墙有没有开放你的自定义SSH端口
- 远程的
sshd_config文件里有没有开启root登录(默认可能禁用,修改/etc/ssh/sshd_config里的PermitRootLogin yes,然后重启sshd:systemctl restart sshd) - 本地SSH配置里的IP、端口有没有写错
如果Git提示权限问题,检查远程仓库目录的权限,确保root用户有读写权限。
内容的提问来源于stack exchange,提问作者MarvinLeRouge




