ruby - 使用 SSH 克隆存储库时出现 "permission denied"错误?

标签 ruby git shell ssh

我编写了一个 shell 脚本来从 100 多个系统上的 Git 克隆一个存储库,我正在登录到每个系统。

我通过在托管它的系统上运行它来测试脚本,但是当我通过使用 SSH 从其他系统登录来运行相同的脚本时,它会给我一个“权限被拒绝”的错误,尽管脚本存在于我必须在同一系统上进行克隆。

我正在使用 Ruby 1.8.7。

为了登录目的,我创建了另一个脚本文件,首先我登录并运行这里的脚本是我的代码在我的 login.sh here $1 是我将端口参数传递给 login.sh

sshpass -p 1234 ssh -p $1 admin@localhost './my_update_steps.sh &' 

在脚本中也进行了更改,以便它可以使用 keygen 自动处理 key 生成。这是代码:

ssh-keygen -R myhostname
ssh-keyscan -H myhostname >> ~/.ssh/known_hosts
rm ~/.ssh/known_hosts.old

编辑 1

通过使用这个 link我已将 .ssh/config 文件中的更改更改为

Host *
    StrictHostKeyChecking no 

但仍然报错

Warning: Permanently added 'XXXX.XXXXX.XXXX.XXX'  to the list of known hosts.^M
Permission denied (publickey).^M
fatal: The remote end hung up unexpectedly

我该如何解决这个错误?我有什么想念的吗? ^M 在这里是什么意思。

最佳答案

如果您在同一台主机上克隆存储库,您实际上不需要使用 ssh 协议(protocol)。您可以通过指定直接路径更有效地克隆:

git clone /home/admin/path/repository.git

当然,进行克隆的用户需要对存储库中的文件具有读取权限。如果你有很多人推送到源存储库,这可能是一个维护问题;见these answers如果是这种情况,请获取有关正确设置权限的一些指导。

至于你的 ssh 问题:从你展示的脚本来看,你错过了最后一步,即将你的公钥副本安装到 ~/.ssh/authorized_keys。即使您以同一用户身份登录本地主机,这也是必要的。您可以使用 ssh-copy-id 执行此操作,它也将 correct some permissions problems for you :

sshpass -p 1234 ssh-copy-id localhost

关于ruby - 使用 SSH 克隆存储库时出现 "permission denied"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692111/

相关文章:

git - git 输出的 "+1/-1"是什么意思?

linux - 我们如何在 playbook 中使用编码值并在 ansible playbook 需要时对其进行解码?

linux - 解析 bash 脚本中的文本

linux - 如何在 Bash 中逐行打印时对数据进行排序

ruby-on-rails - 在 Ruby 中访问 JSON 对象

ruby - "at"印记 (@) 在 Ruby 函数中给出什么范围?

GIT 将文件从 dev 重新 merge 到 master

ruby-on-rails - 更长的文件名与 git merge

ruby-on-rails - Capistrano, bundle 路径问题

linux - "Failed to connect to github.com port 443: Connection timed out"推送到远程仓库时