从 Jenkins Rsync 到 Google 计算引擎实例

问题描述 投票:0回答:6

我想将文件从 Jenkins 发送到我在 Google 计算引擎实例中的实例,我在 jenkins 的配置中添加了一个构建:

rsync -vrzhe "ssh -i /var/lib/jenkins/.ssh/google_compute_engine -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no" . login@Host:/var/www

我收到此错误:

Checking out Revision 59cf9dd819fe2168c4c40f716707d58b2b99e251 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 59cf9dd819fe2168c4c40f716707d58b2b99e251
> git rev-list 59cf9dd819fe2168c4c40f716707d58b2b99e251 # timeout=10
[Platform] $ /bin/sh -xe /tmp/hudson4502433356962914860.sh
+ rsync -vrzhe 'ssh -i /var/lib/jenkins/.ssh -o UserKnownHostsFile=/dev/null -o 

CheckHostIP=no -o StrictHostKeyChecking=no' . login@Host:/var/www
   StrictHostKeyChecking=no' . login@host:/var/www
   ssh: connect to host host port 22: Connection timed out
   rsync: connection unexpectedly closed (0 bytes received so far) [sender]
   rsync error: unexplained error (code 255) at io.c(601) [sender=3.0.7]
   Build step 'Exécuter un script shell' marked build as failure
   Finished: FAILURE

有什么想法吗

git jenkins bitbucket rsync google-compute-engine
6个回答
21
投票

首先配置 .ssh 配置文件(假设您安装了 gcloud sdk):

gcloud compute config-ssh

它会告诉您“现在您可以通过运行在您的实例中使用 ssh/scp

ssh your-instance

your-instance 通常采用“instance.zone.project”的形式。

现在您可以进行 rsync 了:

rsync -ave ssh your-local-dir your-instance:~/your-destination

完成。

如果您愿意,您可以提及该用户:

rsync -ave ssh your-local-dir your-user@your-instance:~/your-destination

这对我有用。但请不要忘记将“您的实例”(和您的用户)替换为正确的实例。 您可以通过“gcloudcomputeconfig-ssh”或“gcloudcomputeconfig-ssh --dry-run”获取它,或者访问cloud.google.com,然后访问计算引擎,然后访问vm实例,然后从连接中选择查看gcloud命令。全部将以“instance.zone.project”的形式显示您的实例名称。

我希望它能对将来的人有所帮助。 :)


6
投票

可能有点晚了,但您可以直接使用

gcloud compute ssh
命令,而不用查找 google ssh 密钥。

首先,您必须创建一个脚本来隐藏 gcloud 中的 rsync ssh 命令参数:

cat >./gcloud-compute-ssh <<EOF
#! /bin/sh
host="$1"
shift
exec gcloud compute ssh "$host" -- "$@"
EOF

chmod a+x ./gcloud-compute-ssh

然后你就可以

rsync -e
随心所欲:

rsync -e ./gcloud-compute-ssh my-dir my-instance:/my-dir

3
投票

上面的 rsync 命令使用 ssh 的 -i 选项。 -i 选项的参数应该是 ssh 密钥文件的路径,而不是密钥文件所在的目录。


2
投票

问题出在我的公钥上,所以要解决这个问题,你需要:

1 - 设置 ssh 密钥:运行

gcloud compute ssh example-instance

2 - 将您的 .ssh/google_compute_engine.pub 内容复制到 GCE VM 授权密钥中

3 - 重新启动虚拟机实例

感谢您的帮助


1
投票

2024年,您可以按照步骤:

gcloud compute config-ssh

此 cli 将在

~/.ssh/config
中生成配置,并返回如下内容:

You should now be able to use ssh/scp with your instances.
For example, try running:

 $ ssh [instanceName].[zone].[projectName]

然后您可以使用该主机与 rsync 一起使用:

rsync -avzP ~/local/file [instanceName].[zone].[projectName]:/host/file

0
投票

如“如何解决rsync错误:windows上io.c(600)处的rsync协议数据流(代码12)错误”中提到的,检查实际使用哪个ssh,以及该ssh版本是否兼容与 rsync 中的一个。

指定 ssh 可执行文件的绝对路径会有所帮助:

rsync -e /usr/bin/ssh .... 

此线程还建议清除

~/.ssh/know_hosts
,以防服务器发生更改并且现在有不同的密钥。

© www.soinside.com 2019 - 2024. All rights reserved.