使用SSH克隆仓库时出现“permission denied”错误?

3
我编写了一个shell脚本,在100多个系统上克隆Git存储库,我登录到每个系统。 我在托管它的系统上测试了脚本,但当我通过SSH从其他系统登录并运行相同的脚本时,它会给出“权限被拒绝”的错误,尽管我必须在相同的系统上进行克隆。我正在使用Ruby 1.8.7。
为了登录目的,我创建了另一个脚本文件,其中首先我登录并运行脚本。这是我的login.sh代码,这里的$1是我传递给login.sh的端口参数。
sshpass -p 1234 ssh -p $1 admin@localhost './my_update_steps.sh &' 

在脚本中,它还可以通过使用keygen自动生成密钥,并进行更改以自动处理。以下是该代码:
ssh-keygen -R myhostname
ssh-keyscan -H myhostname >> ~/.ssh/known_hosts
rm ~/.ssh/known_hosts.old

编辑 1

通过使用这个链接,我已经在.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 在这里的含义是什么。

2
我的第一个猜测是你的users用户没有适当的权限来访问~/.ssh/known_hosts或者~/.myscript - Stoic
但是我已经使用相同的用户在同一系统上登录,并且我可以执行那个脚本。 - r15
我正在使用相同的用户。 - r15
@Stoic 我也尝试过给予777权限。 - r15
当您登录到远程系统时,存储库是否位于本地主机上?还是位于不同的服务器上?也就是说,您是否真的想要通过ssh连接到该框并连接到本地主机? - Doon
显示剩余2条评论
3个回答

2

您提供的信息不足以进行治疗,但足以做出诊断。

出现 ^M (Ctrl-M) 字符的原因是由于Windows和Unix对文本文件中行的结束方式存在争议。Windows(和DOS)使用CR(回车,ASCII码13)后跟LF(换行,ASCII码10)来终止文本行。而Linux只使用LF,所以回车符出现在文本的一部分中。这个小问题可能会导致几乎所有东西都崩溃。(事实上,MacOS仅使用CR终止文本行,使情况变得更加严重。)

如果您尝试使用二进制FTP协议将文本文件从Windows传输到Nix框(反之亦然),您将以尾随的^M(Win⇒nix情况)或所有行连接成一个巨大的行与^J(nix⇒win情况,Win不将^JLF单独视为回车符)。这就是为什么有FTP文本/二进制传输之间的差异的原因。

您的错误显示您遇到了EOL问题。想象一下,您的脚本以及ssh密钥文件都有尾随的^M。公钥从一行的开头读取到最后;多余的尾随^M使键不适用(请参见字符串比较:abc != abc^M,对吗?)

所以。总结一下。我建议您使用标准方法在远程机器上执行脚本:

ssh … <<ENDSSH
command1.sh
command2.sh
…
commandN.sh
ENDSSH

这将把行尾处理委托给操作系统,它们会尽力而为。我很乐意回答一些即将出现的问题,但基于您发布的内容,这是我能提供的所有诊断信息。

2
如果您是在同一台主机上克隆存储库,实际上并不需要使用ssh协议。只需指定直接路径即可更高效地克隆:
git clone /home/admin/path/repository.git

当然,进行克隆的用户需要对仓库中的文件拥有读取权限。如果您有许多人向源代码库推送内容,则可能很难维护此权限;如果是这种情况,请参考这些答案以了解如何正确设置权限。
至于您的ssh问题:从您展示的脚本来看,您缺少一个最后步骤,即将公钥副本安装到~/.ssh/authorized_keys中。即使您以相同的用户登录到本地主机,这也是必要的。您可以使用ssh-copy-id来完成此操作,它还会为您纠正一些权限问题
sshpass -p 1234 ssh-copy-id localhost

1
这是错误信息:
Permission denied (publickey).

他告诉我,你可能在其他系统上缺少关键文件。

您需要确保已将SSH密钥推送到要克隆的每个系统。

为了简洁起见,您的密钥位于〜/ .ssh / 中,通常类似于 id_rsa.* (尽管不必如此)。


我检查过它们都存在。 - r15
请确保您的密钥和 ~/.ssh 目录的权限设置正确。此外,请确保您已将公钥安装到远程系统上。 - Donovan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接