我想将文件从 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
有什么想法吗
首先配置 .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”的形式显示您的实例名称。
我希望它能对将来的人有所帮助。 :)
可能有点晚了,但您可以直接使用
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
上面的 rsync 命令使用 ssh 的 -i 选项。 -i 选项的参数应该是 ssh 密钥文件的路径,而不是密钥文件所在的目录。
问题出在我的公钥上,所以要解决这个问题,你需要:
1 - 设置 ssh 密钥:运行
gcloud compute ssh example-instance
2 - 将您的 .ssh/google_compute_engine.pub 内容复制到 GCE VM 授权密钥中
3 - 重新启动虚拟机实例
感谢您的帮助
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
如“如何解决rsync错误:windows上io.c(600)处的rsync协议数据流(代码12)错误”中提到的,检查实际使用哪个ssh,以及该ssh版本是否兼容与 rsync 中的一个。
指定 ssh 可执行文件的绝对路径会有所帮助:
rsync -e /usr/bin/ssh ....
此线程还建议清除
~/.ssh/know_hosts
,以防服务器发生更改并且现在有不同的密钥。