Ruby 获得;“拒绝许可”;使用SSH克隆存储库时出错?
我编写了一个shell脚本,在100多个系统上从Git克隆一个存储库,每个系统都有我的日志记录 我通过在托管脚本的系统上运行脚本来测试它,但是当我通过使用SSH从其他系统登录来运行相同的脚本时,它会给我一个“权限被拒绝”错误,尽管脚本存在于我必须进行克隆的同一系统上 我正在使用Ruby 1.8.7 出于登录目的,我创建了另一个脚本文件,在该文件中,我首先登录并运行脚本。这里是我的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
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