我在本地机器上生成了我的 ssh 密钥。
然后我使用以下命令将我的公钥复制到我的服务器上:
ssh-copy-id username@remote_host
。一切顺利。我已确认本地机器的
~/.ssh/id_rsa.pub
已复制到我的服务器上my_user's_home_directory/.ssh/authorized_keys
。那里没有其他文件。我还将同一个公钥复制到了 Gitlab 中。
当我尝试将
git clone
repo 上传到服务器时,系统提示我:
[email protected]: Permission denied (publickey,keyboard-interactive).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
- 我可以轻松地通过 ssh 进入我的服务器。但由于我的服务器没有我的私钥,因此我无法通过 ssh git clone 进行操作,这对我来说是有道理的。这里的正常程序是什么?我可以进行常规 https 下载,这是标准路线吗?
答案1
您可以使用ssh -A
ssh-agent 转发到远程主机,远程主机将使用来自远程服务器的本地密钥,而无需发送密钥本身。
虽然这似乎是一个安全的选择,但只能这样做如果你绝对信任远程服务器(即默认情况下不启用此功能)。转发的 ssh-agent 可由与您拥有相同远程用户或具有 root 权限的任何人使用。
如果您决定这样做,我建议向代理添加密钥,以便ssh-add -c
在使用密钥时提示您确认。
答案2
git 是去中心化的。可以从 Gitlab 获取数据到您的 PC,然后从您的 PC 推送到服务器。ssh 客户端是您的 PC,因此您的私钥或转发代理不会接触服务器。
或者,可以有多个 ssh 密钥。一个用于您的 PC,另一个用于服务器。需要管理更多密钥,但可以单独监控和控制,服务帐户风格。
或者,不要使用 git 作为部署工具。生成一个包或其他存档,然后像安装其他软件一样安装它。