我有三台服务器(两台 ubuntu 16.04,一台 mac mini)和几台 macbook。
一台服务器 ubuntu 用于 gitlab,另一台是内部站点服务器。 mac mini 正在运行 CI。
最近 gitlab 服务器被替换为另一个 gitlab 服务器。 (更换硬件、相同的 IP 地址和主机名、新软件、新 ssh 密钥、所有其他硬件(其他服务器和笔记本电脑)都像以前一样使用 ssh 密钥)。
任何 macbook 都可以通过 SSH 连接到任一服务器(使用服务器上用户的用户名/密码),并且可以使用 Git 通过公钥通过 git 服务器进行克隆、推送等。
站点服务器可以通过 SSH(通过公钥)连接到 git 服务器,但一旦出现欢迎消息,连接就会终止。站点服务器无法通过公钥使用 git,因为 Git 会提示输入密码,除非它不使用并且使用持续一段时间的公钥工作,否则只有在用户文档目录中使用测试时才开始工作,如果我再次尝试在目录 git Breaks 中克隆/var/www
(这可能是巧合,它只工作了两次)。
CI 与 git 服务器的连接没有问题。
使用 ssh -v 输出显示 ssh 使用正确的公钥。
因此在站点服务器上运行以下命令
ssh [email protected]
连接(然后断开)但是
git clone [email protected]:somerepo.git
询问 git 用户的密码。
站点服务器有一个在 gitlab 上注册的用户(带有 ssh 密钥)。
多次调用的输出示例:https://pastebin.com/QH0AntK7
答案1
我偶然发现了同样的问题,问题是我git
以 root 身份在用户的主目录中执行了一些操作,因此无法读取授权的 SSH 密钥文件。
修复方法是运行:
$ chown -R git:git /home/git/.ssh
答案2
首先要测试的是从站点服务器到 git 服务器的基于密钥的 SSH 是否有效。从你的描述来看,似乎没有。在运行 ssh 之前,您是否拥有站点服务器上用户的cat
公钥?git
~/.ssh/authoried_keys
答案3
为 @LazyBadger 创建日志后,我意识到它仅在使用 sudo 运行时才会失败,因为它使用不同的 ssh 密钥。
我已将 root 用户 ssh 密钥包含在 git 服务器上的站点服务器帐户中,现在它可以工作了。
答案4
尽管OP找到了解决方案,但由于另一种可能发生这种情况的方式,我感到很挣扎。
连接ssh
将会成功,但git fetch
如果您已配置sshcommand
为在您的.git/config
或~/.gitconfig
.例如,我有如下内容(键名称已更改):
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
sshcommand = ssh -i /home/user/.ssh/repo_deploy
[remote "origin"]
...
由于我习惯于ssh-copy-id
复制/home/user/.ssh/id_rsa
而不是复制/home/user/.ssh/repo_deploy
,所以我的结果与OP非常相似。