最近用docker新搭建了一个jenkins,安装插件的时候发现publish over ssh找不到了,官方给出的解释是存在安全隐患于2022.01.12暂停分发,官方解释如下:https://www.jenkins.io/security/advisory/2022-01-12

之前文章介绍过通过publish over ssh插件推送jenkins编译好的项目到对应服务器,现在该插件无法使用了,只能寻找替代插件。

在程序猿bug解决圣地找到一篇咨询该问题的解决方案:https://stackoverflow.com/questions/70828203/which-plugins-could-replace-publish-over-ssh-from-jenkins,使用ssh插件(未安装之前在可选插件里叫ssh,安装之后在已安装里叫ssh plugin),不过该插件上一次版本更新也已经是3年前10个月了(截止2022.02.12)。

查找资料学习ssh插件的用法。。。。。。

搜索关键字jenkins ssh,你查到的99.999%资料都是关于publish over ssh的,垃圾。。。

于是搜索This plugin executes shell commands remotely using SSH protocol,找到一篇完整介绍通过ssh方式配置的文章:https://blog.51cto.com/wujianwei/2492430

一、安装ssh插件,如上图。

二、配置远程ssh连接服务器的账号密码凭据。(这里我们以root账号讲解,关于非root账号(或者说非最大权限的账号)我们后面单独介绍。)
  Manage Jenkins(系统管理) —>Manage Credentials --> Stores scoped to Jenkins 下的权限域 --> 全局凭据 --> 点击左侧添加凭据按钮 --> 选择类型(Username with password 或者 SSH Username with private key)--> 填写账号密码(或private key)后确认添加。

 三、配置SSH服务器参数。

  Manage Jenkins(系统管理) —>System Configuration(系统配置) --> SSH remote hosts --> 点击SSH sites下的新增按钮 --> 填写以下信息 --> 填写完后点击底部的保存(或应用)。

hostname:要ssh连接的服务器ip;

port:服务器端口;

Credentials:选择连接的账号;

下面的可以暂时不填,表示用默认值。

点击按钮Check connection,验证配置的以上参数是否正确。

 四、构建应用。

  关于创建新任务本文就不介绍了,前面文章有介绍过,网上文章也不少。本次我们只说新增加的ssh方式。

  在构建选项下增加构建步骤:Execute shell script on remote host using ssh

  

  填写ssh连接的远程服务器,和连接后的shell执行语句。我这里是连接到宿主机,然后把宿主机挂载的tomcat容器项目清理再重新从jenkins容器挂载的编译文件夹中复制新的。

  

保存后执行即可成功~~


以上配置是假设你知道服务器root账号(或其他类似root权限账号)的基础上,,很多时候IT给我们的机器是通过堡垒机(即服务器管理系统)登录的,虽然登录的是root账号但是不给到root账号密码,这个时候可能需要我们自己创建账号,然后配置对应的参数到jenkins系统管理的ssh中。

关于在centos中创建账号,可以参考这篇文章:https://www.cnblogs.com/geoffreygao/p/12238231.html

一、添加新账号:

useradd 你的新账号;
#例如添加账户王小明:useradd wangxiaoming

二、添加密码:

passwd 你上面创建的新账号;
# 例如:passwd wangxiaoming

  此时会让你输入密码,输入密码时不显示任何字符,不要以为卡住了,不要按删除键del,密码输好后按确认键enter,如果密码太简单安全性较低会提示你,不用管,继续就好,会让你再输入一遍密码确认。

三、设置权限:

  此时的新账号只有查看权限, 如果你想复制(cp)文件、移动文件(mv)、删除文件(rm)都是没有权限的。

   

#切换账号,有的文章介绍中su后面加-,发现在centos中会有不正确提示,不需要加就能切换。
su wangxiaoming #执行复制文件。非root账号前需要加sudo关键字。
sudo cp favicon.ico favicon.ico3

#提示输入密码验证后才能操作,此时输入密码提示没有再sudoers文件中存在权限。

  根据前面参考文章要在/etc/sudoers中添加权限,而本身该文件是没有写入权限的,需要先修改该文件为可写入权限。而修改sudoers文件需要root账号操作。

# 注意要切换回root账号,因为我在堡垒机上没有root账号密码,所以是重新开启新shell窗口以root账号操作。
# 为sudoers添加可写权限
chomd -v u+w /etc/sudoers
# 编辑sudoers文件
vi /etc/sudoers 按Insert键进入编辑模式 # 在 sudoers 文件添加新用户信息到 ## Allow root to run any commands anywhere 下,修改后的效果为:
## Allow root to run any commands anywher
root ALL=(ALL) ALL
wangxiaoming ALL=(ALL) ALL

按Esc 后 输入 :wq 保存并退出

  此时再执行sudo cp favicon.ico favicon.ico3,输入密码后复制文件成功。

四、去掉密码验证。

  上面我们发现执行sudo cp语句后需要输入密码验证,但我们本意是要在jenkins中执行的,而jenkins中自动执行的过程中是无法输入密码的,所以会导致构建失败(大家可以去试下)。

  那么我们是否可以设为不用输入密码就执行呢,答案是可以的。方法还是修改上面的sudoers文件,只不过最后的ALL变为NOPASSWD: ALL即可。

# 注意要切换回root账号,因为我在堡垒机上没有root账号密码,所以是重新开启新shell窗口以root账号操作。

# 编辑sudoers文件
vi /etc/sudoers 按Insert键进入编辑模式 # 在 sudoers 文件添加新用户信息到 ## Allow root to run any commands anywhere 下,修改后的效果为:
## Allow root to run any commands anywher
root ALL=(ALL) ALL
wangxiaoming ALL=(ALL) NOPASSWD: ALL 按Esc 后 输入 :wq 保存并退出

  再执行sudo cp语句发现不需要输入密码验证了。

五、修改sudoers文件回不可写入模式。

  前面我们将sudoers文件设为了可写入模式,此时记得重新将其权限设为不可写入哦,当然要用root账号操作~~

# 注意要切换回root账号,因为我在堡垒机上没有root账号密码,所以是重新开启新shell窗口以root账号操作。

#取消 sudoers 文件可写权限
chmod -v u-w /etc/sudoers

这样在jenkins中用非root账号执行shell便不需要再输入账号密码了。


最后,虽然本次方式暂时解决了没有publish over ssh的问题,但目前该方式仅适合两种情况:

1、ssh连接到远程服务器后在远程服务器执行构建操作,或在远程服务器直接获取已构建好的项目。

2、使用docker容器模式,而且jenkins容器和对应的服务器容器(比如tomcat)在同一个宿主机上,这样可以通过ssh连接到宿主机进行文件夹之间的增删移动复制操作。

我这次情况是2。

其他的情况可能不适用本文方式。

今天大佬给了一个新思路,说将两个服务器添加互信,然后不用插件方式,有私钥公钥后直接shell执行ssh登录。下一次我将用这种方式学习并记录一下。

jenkins插件Publish Over SSH因安全问题下架的更多相关文章

  1. Jenkins通过Publish over SSH插件实现远程部署

    Jenkins通过Publish over SSH插件实现远程部署 步凑一.配置ssh免秘钥登录 部署详情地址:http://www.cnblogs.com/Dev0ps/p/8259099.html ...

  2. jenkins配置publish over ssh遇到的问题

    一.背景 目标 本篇文章主要是说明自己在配置jenkins的publish over ssh插件所遇到的问题.本次主要是windows下的jenkins通过ssh的方式访问我本地虚拟机的ubuntu系 ...

  3. Jenkins配置Publish Over SSH讲解说明

    原创 Jenkins配置Publish Over SSH讲解说明 2018-08-22 11:59:30 M.Blog 阅读数 3764更多 分类专栏: Jenkins   版权声明:本文为博主原创文 ...

  4. Jenkins系列-Jenkins通过Publish over SSH插件实现远程部署

    配置ssh免秘钥登录 安装Publish over SSH插件 插件使用官网:https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plug ...

  5. Jenkins中Publish Over SSH插件使用

    Publish Over SSH插件安装 进入插件管理安装插件,我这里已经安装过了所以在installed里面,没安装过去available里面搜索. 系统设置中配置Publish Over SSH ...

  6. 使用 svn+maven+jenkins(hudson)+Publish Over SSH plugins 构建持续集成及自动远程发布体系(转)

    1.安装jenkins 2.浏览器访问jenkins主页 http://192.168.0.1:8080/,点击“系统管理” 3.在插件管理中,安装Publish Over SSH插件 4.在系统设置 ...

  7. jenkins使用Publish Over SSH中遇到的问题

    在jenkins中想使用publish over ssh来在构建后发送XML或PNG文件至服务器,以便做其它的操作,安装完publish over ssh后,填加构建,发现在构建失败时,不传送文件,老 ...

  8. Jenkins高级应用——Publish Over SSH插件

    在之前的篇幅中有介绍,利用jenkins结合shell脚本完成远程部署的功能,点击Jenkins结合shell+expect脚本完成线上环境自动构建部署即可查看. 上述方式需要引入expect脚本,安 ...

  9. 使用Publish Over SSH插件实现远程自动部署

    背景: 现场的部署环境开放外网环境困难,只有一台机器能够开发外网,应对该情况,所有的补丁文件需要直接在master机器上面生成,然后命令移动到其他的服务器上面去. 这里使用到了jenkins的Publ ...

随机推荐

  1. CSS基础-4 定位

    CSS定位和浮动 css定位:改变页面的位置 定位机制有以下三种 普通流 浮动 绝对布局 定位的属性: position:把元素放在一个静态的.相对的.绝对的.或固定的位置中 top          ...

  2. 建造者模式(python)

    建造者模式将复杂对象的构建与其表示分离.建造者模式主要有两个参与者:建造者(builder)和指挥者(director) 来自为知笔记(Wiz)

  3. 实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用

    实验 7 : OpenDaylight 实验 -- Python 中的 REST API 调用 一.实验 目的 对 Python 调用 OpenDaylight 的 REST API 方法有初步了解. ...

  4. ON UPDATE CURRENT_TIMESTAMP请慎用

    大家好,我是架构摆渡人.这是实践经验系列的第七篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. 今天给大家分享一个容易忽略的问题,正是因为容易忽略,所以才要重 ...

  5. vue 表格树 固定表头

    参考网上黄龙的表格树进行完善,并添加固定表头等的功能,目前是在iview的项目中实现,如果想在element中实现的话修改对应的元素标签及相关写法即可. <!-- @events @on-row ...

  6. .Net 线程安全集合

    .Net 提供了基于生产-消费模式的集合类,这些集合对多线程访问安全,定义在System.Collections.Concurrent名称空间中.这个名称空间中包括基础接口IProduceConsum ...

  7. 谱分解(SD)

    前提:矩阵A必须可相似对角化! 充分条件: $A$ 是实对称矩阵 $A$ 有 $n$ 个互异特征值 $A^{\wedge} 2=A $ $\mathrm{A}^{\wedge} 2=\mathrm{E ...

  8. Android WebView优化

    1.展示webview的activity可以另开一个进程,这样就能和我们app的主进程分开了,即使webview产生了oom崩溃等问题也不会影响到主程序,如何实现呢,其实很简单,在androidman ...

  9. 【机器学习】HMM

    机器学习算法-HMM 目录 机器学习算法-HMM 1. 模型定义 2. 序列生成 3. 概率计算 3.1 前向计算 3.2 后向计算 4. 学习 4.1 求解 4.2 求解 4.3 求解 5. 预测 ...

  10. 经典面试题:分布式缓存热点KEY问题如何解决--有赞方案

    有赞透明多级缓存解决方案(TMC) 一.引子 1-1. TMC 是什么 TMC ,即"透明多级缓存( Transparent Multilevel Cache )",是有赞 Paa ...