Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 获得;“拒绝许可”;使用SSH克隆存储库时出错?_Ruby_Git_Shell_Ssh - Fatal编程技术网

Ruby 获得;“拒绝许可”;使用SSH克隆存储库时出错?

Ruby 获得;“拒绝许可”;使用SSH克隆存储库时出错?,ruby,git,shell,ssh,Ruby,Git,Shell,Ssh,我编写了一个shell脚本,在100多个系统上从Git克隆一个存储库,每个系统都有我的日志记录 我通过在托管脚本的系统上运行脚本来测试它,但是当我通过使用SSH从其他系统登录来运行相同的脚本时,它会给我一个“权限被拒绝”错误,尽管脚本存在于我必须进行克隆的同一系统上 我正在使用Ruby 1.8.7 出于登录目的,我创建了另一个脚本文件,在该文件中,我首先登录并运行脚本。这里是我的login.sh中的代码。这里$1是我将端口参数传递给login.sh sshpass -p 1234 ssh -p

我编写了一个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 &' 
In-script还进行了更改,以便它可以使用
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在这里的意思是什么。

这个错误:

Permission denied (publickey).
告诉我你可能丢失了其他系统上的关键文件

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


为简洁起见,您的密钥位于
~/.ssh/
中,通常类似于
id\u rsa.*
(尽管它们不必是)。

如果您要在同一主机上克隆存储库,实际上不需要使用ssh协议。只需指定直接路径,即可更高效地进行克隆:

git clone /home/admin/path/repository.git
当然,进行克隆的用户需要对存储库中的文件具有读取权限。如果有很多人推到源存储库,那么这可能是一个需要维护的问题;有关正确设置权限的指导信息,请参阅

至于您的ssh问题:从您显示的脚本来看,您缺少了最后一个步骤,即将公钥的副本安装到
~/.ssh/authorized_keys
中。即使您以同一用户身份登录localhost,这也是必需的。您可以使用
ssh copy id
执行此操作,它还将:


你提供的信息不足以治愈疾病,但足以做出诊断

出现
^M
(Ctrl-M)字符的原因是windows/unix对文本文件中的行如何结束存在争议。Windows(和DOS)用
CR
^M
,回车,ASCII代码13)终止文本行,后跟
LF
(换行符,ASCII代码10)。Linux只使用
LF
,因此回车符显示为文本的一部分。那件小事可能会破坏一切。(事实上,MacOS只使用
CR
终止文本行,这让地狱更加燃烧。)

如果您尝试使用二进制FTP协议将文本文件从win传输到nix box(反之亦然),则最终会出现尾随的
^M
s(win)⇒nix case)或将所有行连接成一个带有
^J
(nix)的大行⇒win案例,win不处理
^J
≡<代码>左前
单独作为回车)。这就是为什么FTP文本/二进制传输之间存在差异

您的错误表明您遇到了EOL问题。假设您的脚本和ssh密钥文件都有尾随^M。公钥从行的开头一直读取到行尾;额外的尾随^M使键不合适(请参阅字符串比较:
abc
!=
abc^M
,对吗?)

所以。总结。我建议您使用标准方式在远程计算机上执行脚本:

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

ssh…我的第一个猜测是您的
用户
用户对
~/.ssh/known_hosts
或:
~/.myscript
没有适当的权限。但是我已经用同一个用户登录了同一个系统,我可以执行该脚本。我正在用同一个用户执行这两个操作。你能用手复制这个bug吗?i、 e.尝试在remove machine not by script中克隆repo失败?我厌倦了简单的克隆,它可以正常工作。我检查了它们是否存在。确保您的密钥以及~/.ssh目录上的权限正确。另外,请确保已在远程系统上安装公钥。
ssh … <<ENDSSH
command1.sh
command2.sh
…
commandN.sh
ENDSSH