Rsync 到 Google 来自 Jenkins 的计算引擎实例

Rsync to Google Compute engine Instance from Jenkins

我想将文件从 Jenkins 发送到我在 Google Compute Engine 实例中的实例 我在 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

任何想法

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

如“How to solve rsync error: error in rsync protocol data stream (code 12) at io.c(600) on windows”中所述,检查实际使用的是哪个 ssh,以及该 ssh 版本是否与来自 rsync 的版本兼容。

为 ssh 可执行文件指定绝对路径可以帮助:

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

This thread 还建议清除 ~/.ssh/know_hosts 以防服务器已更改并且现在有不同的密钥。

问题出在我的 public 密钥上,因此要解决您需要的问题:

1 - 设置您的 ssh 密钥:运行

gcloud compute ssh example-instance

2 - 将您的 .ssh/google_compute_engine.pub 内容复制到 GCE VM authorized_key

3 - 重启 VM 实例

感谢您的帮助

可能有点晚了,但是你可以直接使用 gcloud compute ssh 命令而不是查找 google ssh 密钥。

首先,您必须制作一个脚本,从 gcloud 中隐藏 rsync ssh 命令参数:

cat >./gcloud-compute-ssh <<EOF
#! /bin/sh
host=""
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

首先配置 .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

它对我有用。 Juts 不要忘记用正确的替换 "your-instance"(和 your-user)。 您可以通过 "gcloud compute config-ssh" 或 "gcloud compute config-ssh --dry-run" 获取它,或者转到您的 cloud.google.com 然后计算引擎然后 vm 实例然后从连接选择视图 gcloud 命令。全部将以 "instance.zone.project."

的形式显示您的实例名称

我希望它能对以后的人有所帮助。 :)