我编写了一个 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/