You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JFrog CLI将stdin内容通过跳板机上传至Artifactory?

你之前的方法失效的核心原因是JFrog CLI的rt upload命令原生不支持从标准输入读取内容,也不识别-作为stdin占位符;命名管道失效是因为JFrog CLI上传前会尝试读取文件大小、计算哈希值,需要可随机访问的文件描述符,无法处理流式输入的管道。

可行解决方案

方案1:SSH端口转发本地直连上传(推荐)

不需要在跳板机写入任何数据,所有操作在本地完成,避免跳板机的资源限制:

  • 本地启动SSH端口转发,将内网Artifactory的服务端口映射到本地:
    # 请替换Artifactory的内网域名、端口和跳板机地址,-Nf参数让SSH后台静默运行
    ssh -L 8082:artifactory.internal.domain:8082 jumpbox -Nf
    
  • 本地配置临时Artifactory实例指向本地转发端口:
    jfrog config add temp-instance --url=http://localhost:8082/artifactory --user=<你的账号> --password=<你的密码>
    
  • 本地直接执行流式上传,如果你用的jfrog CLI版本支持stdin的话直接用-即可,不支持的话可以用curl替代:
    # jfrog CLI方式(版本足够新可直接用)
    jfrog rt u - reponame/dir/myfile.tgz < myfile.tgz
    
    # curl替代方案,不需要依赖jfrog CLI,兼容性更好
    cat myfile.tgz | curl -u <你的账号>:<你的密码> -T - http://localhost:8082/artifactory/reponame/dir/myfile.tgz
    
  • 上传完成后杀掉后台的SSH转发进程即可。

方案2:跳板机用curl直接流式上传

如果无法配置端口转发,可以直接在跳板机用curl完成上传,curl原生支持stdin读取,也能正确识别EOF,全程不写磁盘:

ssh jumpbox "curl -u <你的账号>:<你的密码> -T - http://artifactory.internal.domain/artifactory/reponame/dir/myfile.tgz" < myfile.tgz

方案3:内存临时文件适配jfrog CLI

如果必须使用jfrog CLI上传,可以利用Linux默认挂载的内存文件系统/dev/shm存储临时文件,不会占用磁盘空间:

ssh jumpbox "cat > /dev/shm/tmp_upload.tgz && jfrog rt u /dev/shm/tmp_upload.tgz reponame/dir/myfile.tgz && rm -f /dev/shm/tmp_upload.tgz" < myfile.tgz

注意该方案要求待上传文件大小小于跳板机的可用内存空间


内容的提问来源于stack exchange,提问作者Paul M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:48:00