jenkins用户在执行scp的时候如何做免密登录

一、背景

在jenkins job中执行scp的shell命令,当然不希望每次输入密码,另外处于出于安全考虑,也不建议在scp命令中指定。

所以,我们需要对远程机器进行免密登录。

本文遇到的问题是,在jenkins机器上执行scp已做到了免密,无需输入密码;但是,在jenkins job中执行scp命令,却报错Permission denied, please try again.

二、总体架构

三、scp免密

把jenkins机器上的.ssh/id_rsa添加到远程ssh机器的文件~/.ssh/authorized_keys里。

然后在jenkins机器上执行

ssh devuser@192.168.10.5

其中,192.168.10.5是ftp的地址,ssh用户是devuser,端口默认是22。

这个过程可以说是很简单,经验证,在jenkins机器上上,执行scp命令,成功地下载了zip文件到本地。

但是,当在jenkins执行scp的时候,报错见下:

bash 复制代码
# 尝试从远程机器192.168.10.5的目录/opt/php下载xxx.zip到本地(workspace目录)
+ scp phpuser@192.168.10.5:/opt/php/xxx/xxx.zip ./xxx.zip
Permission denied, please try again.
Permission denied, please try again.
phpuser@192.168.10.5: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Build step 'Execute shell' marked build as failure
Finished: FAILURE

也就是说,ssh免密登录在jenkins用户执行的时候是失效的。

四、免密用户

在Jenkins job中,尝试执行.ssh/id_rsa文件所在的路径,比如:

bash 复制代码
scp -i /root/.ssh/id_rsa phpuser@192.168.10.5:/opt/php/xxx/xxx.zip ./xxx.zip

仍旧报同样的错误。

但是jenkins机器只有一个root用户,jenkins进程本身也是root用户起的。

正当陷入纠结时,发现jenkins工作目录下也有一个.ssh目录。

  • /var/jenkins_home/.ssh

    注意:它是一个隐藏文件夹。

再次把这个文件夹下的ssh公钥添加至远程ssh的授权文件~/.ssh/authorized_keys里。

五、jenkins job 指定ssh私钥

上一步是把jenkins工作目录下的.ssh公钥做好了免密授权。

但是,jenkins job在执行scp命令时,默认读取的是/root/.ssh/id_rsa,而非/var/jenkins_home/.ssh/id_rsa。

在scp的后面指定好ssh私钥文件所在。

bash 复制代码
scp -i /var/jenkins_home/.ssh/id_rsa phpuser@192.168.10.5:/opt/php/xxx/xxx.zip ./xxx.zip

至此,jenkins用户在执行scp命令时,免密登录就实现了。

相关推荐
Decay__2 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
贞明电子4 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
万联WANFLOW5 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
aixingpan6 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
Ruiery7 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
长不大的杨瑞杰7 小时前
OpenCode v2 会话可靠性实战:Snapshots、Compaction、Instructions 与 Formatters
人工智能·安全·云计算·软件工程·devops
Decay__8 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
江华森9 小时前
数据中心基础设施运维实战:概述与实验环境搭建
运维
迪菲赫尔曼9 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
by2099911 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享