jenkins通过sshPut传输文件的时候,报错Permission denied的SftpException

一、背景

使用jenkins的ssh插件传输文件至远程机器的指定目录,php程序打包后,经过zip压缩为oms.zip

powershell 复制代码
zip -rq oms.zip ./ -x '.git/*' -x .env

然后我们求md5值

powershell 复制代码
md5sum oms.zip

最后执行传输。

powershell 复制代码
09:03:02  Executing command on ssh[116.61.10.149]: mkdir -p /opt/php/oms sudo: false
[Pipeline] sshPut
[Pipeline] }
09:03:07  Sending a file/directory to ssh[116.61.10.149]: from: /home/jenkins/agent/workspace/PROD_resource_php_oms/oms.zip into: /opt/php/oms
09:03:08  Failed SFTP PUT: /home/jenkins/agent/workspace/PROD_resource_php_oms/oms.zip -> ssh:/opt/php/oms

二、报错详情

Caused: org.hidetake.groovy.ssh.operation.SftpException: Failed SFTP PUT: /home/jenkins/agent/workspace/PROD_resource_php_oms/oms.zip -> ssh:/opt/php/oms: (SSH_FX_PERMISSION_DENIED: The user does not have sufficient permissions to perform the operation): Permission denied

三、ssh pipeline

powershell 复制代码
    def remote = [:]
    remote.name = 'ssh'
    remote.host = '116.61.10.149'
    remote.port = 22
    remote.allowAnyHosts = true

    def credentialsId = "285a0928-f35f-4485-a54f-48321aea7212"
    
withCredentials([sshUserPrivateKey(credentialsId: credentialsId, keyFileVariable: 'identity', passphraseVariable: '')]) {
        remote.user = 'phpuser'

        remote.identityFile = identity
        // 创建远程目录
        sshCommand remote: remote, command: "mkdir -p " + remoteFilePath

       // 上传jar或者zip包,以及md5文件
        sshPut remote: remote, from: jarFileName, into: remoteFilePath
        sshPut remote: remote, from: md5FileName, into: remoteFilePath
        // 如果是zip压缩文件,额外上传一个.version文件,内容是版本号
        if (".zip" == fileType) {
            sshPut remote: remote, from: ".version", into: remoteFilePath
        }
    }
   

四、排查过程

手动登录远程机器116.61.10.149,然后进入目标目录,查看目录所属的用户是root,而非phpuser,所以报没有权限的错误。

powershell 复制代码
[root@TEST-jekines ~]# ssh phpuser@116.61.10.149
Last login: Thu Jul 28 09:52:44 2022 from 116.61.10.149

Welcome to Alibaba Cloud Elastic Compute Service !

[phpuser@awx-pre ~]$ cd /opt/php
[phpuser@awx-pre php]$ ll
total 15
drwxr-xr-x 2 root root 4096 Jul 25 09:51 oms
  • 查看文件夹的详情
powershell 复制代码
[phpuser@awx-pre php]$ stat oms
  File: 'oms'
  Size: 4096            Blocks: 1          IO Block: 16384  directory
Device: 56h/86d Inode: 6993897     Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-07-25 09:51:29.613946996 +0800
Modify: 2023-07-25 09:51:29.613946996 +0800
Change: 2023-07-25 09:51:29.613946996 +0800
 Birth: -

文件夹oms是在2023-07-25 09:51:29由用户root创建的,所以当phpuser用户来尝试创建目录的时候,会失败,继而传输文件也报权限非法的错误。

五、解决问题

powershell 复制代码
rm -rf /opt/php
  • 删除后,目录/opt/php下为空

  • 重试上传文件

powershell 复制代码
[phpuser@awx-pre oms]$ ll -h
total 170M
-rw-rw-r-- 1 phpuser phpuser 170M Jul 31 10:06 oms.zip
-rw-rw-r-- 1 phpuser phpuser   33 Jul 31 10:06 oms.zip.md5
相关推荐
pt10436 小时前
CML网络仿真入门-2:使用CML模拟网络实验环境
运维·网络协议
沫璃染墨7 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
HAHAXX87 小时前
电商RPA批量上架通用方案:一套流程如何同时跑通拼多多、抖店、淘宝和跨境平台
java·运维·rpa
零基础1238 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化
程序猿老A9 小时前
从入门型到企业型:云服务器开放共享型到独享型规格升级
运维·服务器
Ruiery10 小时前
Linux 6.6内核 CPU 深度解析(九):时钟与 TSC — 内核怎么从 PIT/HPET 切到 TSC
linux·运维·服务器
吴声子夜歌10 小时前
Nginx应用与运维——Nginx监控配置及管理(二)
运维·nginx
吴声子夜歌10 小时前
Nginx应用与运维——Nginx日志管理
java·运维·nginx
打工仔折腾 AI10 小时前
用UU远程把家里电脑变成AI Agent常驻服务器:CLI、端口映射与代理实测
运维·服务器·人工智能·后端·python·电脑·ai agent 实战
guo_wen_qiang10 小时前
云服务器nacos搭建-集群&持久化
java·运维·服务器