Jenkins(二): Jenkins 之 Shell+Publish Over SSH

 


 

 

 


一、SSH命令批量操作Linux服务器

Xshell、FinalShell
手动登录服务器,敲部署命令进行部署
多台部署得 一 一 登录,因此若台数少可用ssh命令。若多的话,还是建议使用ansible等批量执行工具。

 

SSH管理
通常,第一次从本机连接远程主机登录时,需要输入yes,

#vim /etc/ssh/ssh_config
StrictHostKeyChecking no(该参数取消第一次连接时的的"yes/no"验证)

修改后,立即生效,不必重启sshd服务。

若每次登录都需要输入密码,可采用密钥的方式批量管理服务器,实现脚本批量部署

Linux密钥生成
公钥: 相当于锁
私钥: 相当于钥匙,防止丢失

 

SSH命令生成公钥私钥,并传输
①Linux使用命令生成公私钥:

指定生成"rsa"类型的秘钥,默认存放目录为当前用户的"家目录/.ssh/"目录下。
#ssh-keygen -t rsa

回车确认后,在下列提示信息中,有这两行,表示公钥,私钥的存放位置:

  Your identification has been saved in /root/.ssh/id_rsa.
  Your public key has been saved in /root/.ssh/id_rsa.pub.

 

②使用工具将公钥传输到指定机器上

复制代码
#ssh-copy-id -i /root/.ssh/id_rsa.pub  用户@IP
  -i:指定公钥
输入远程主机用户密码,下发公钥

例:

[root@centos7-3 opt]# ssh-copy-id root@192.168.24.122
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.24.122's password:


Number of key(s) added: 1


Now try logging into the machine, with: "ssh 'root@192.168.24.122'"
and check to make sure that only the key(s) you wanted were added.

 
复制代码

 

SSH命令操作服务器
ssh登录服务器 -> 执行Shell命令 -> 执行完退出

复制代码
[root@centos7-3 opt]# ssh 192.168.24.122 "echo  this is $HOSTNAME"
this is centos7-3
#######上条命令知,命令行的变量是从centos7-3本机获取的,而不是获取对应的远程主机变量########

  [root@centos7-3 opt]# ssh 192.168.24.122 "cat /home/gaokai/centos7-2.txt"
  centos7-2 ip 192.168.24.122

 
复制代码

 

Shell批量部署示例

ssh命令连接远程主机时,若不输入用户,默认为root用户。

for ip in $(cat /root/sjghost);do
echo $ip
ssh ${ip} "echo deploying"
done

 

Shell批量下发部署脚本、部署包等

#/root/iphost文件中记录的是IP地址,每一行一个IP地址。

for
ip in $(cat /root/iphost);do echo $ip scp -r /tmp/test.log ${ip}:/usr/local/src/ done

 

Shell批量拉取文件等

for ip in $(cat /root/iphost);do
echo $ip
scp root@${ip}:/usr/local/src/sjg.log /tmp/test.log.${ip}
echo "$ip传输完成"
done

 

 


 

二、ssh公钥批量下发

 

#ssh-copy-id 下发公钥
#ssh-copy-id -i /root/.ssh/id_rsa.pub 127.0.0.1

 

需要手动输入密码,服务器数量多的话,不可能光重复敲该命令,必须借用脚本。

sshpass命令可实现自动输入密码

#yum install sshpass -y
#sshpass -p "xxx" ssh-copy-id -i /root/.ssh/id_rsa.pub 用户@IP地址(用户若为root,可不写)

其中"xxx"为sshpass使用的密码,该密码为用户密码。

 

编写脚本实现公钥批量下发:

复制代码
#vim /root/iphost.sh
  #IP、root密码
  192.168.24.122 roottoor

批量下发公钥实现脚本/root/deployrsa.sh
IFSBAK=$IFS
IFS=$'\n'
for line in $(cat /root/iphost);do
myip=$(echo "$line" | awk '{print $1}')
mypwd=$(echo "$line" | awk '{print $2}')
sshpass -p "$mypwd" ssh-copy-id -i /root/.ssh/id_rsa.pub $myip
done
IFS=$IFSBAK
复制代码

 


三、Jenkins运行Shell命令

 

Jenkins学习流程,按顺序来
  第一步.操作本机Shell命令。
  第二步.通过ssh操作服务器。
  第三步.通过ansible批量操作服务器。

 

使用Jenkins操作本机Shell命令
1.Dashboard栏选择"新建视图"

 

 

2.创建视图(自己创建视图名称[testShell],并选择Type(List View)),点击确定。

 

 

3.Dashboard栏选择"新建Item",即创建任务。任务名"gk_testShell",自由风格的项目(Freestyle project),选择OK(并画√)。

 

 


4.之后在跳出的页面下,选择构建,增加构建步骤,选择执行shell命令
然后填写要执行的shell命令。
然后点击保存。

 

里面也可以放脚本执行 ,对应的iphost文件是已经存放在linux对应的目录下。如图:

 

 

 

 5.然后在Dashboard栏,点击立即构建。

 

 6.可以通过构建历史(Build History)选择,查看执行是否成功,并查看执行结果。

如图,"x"为执行失败,"√"为执行成功:

 

 查看执行成功的:然后选择控制台输出:

若选择"文本方式查看",则会单独列出一页来展示输出内容。

 

 


 

四、Jenkins通过shell管理服务器

工具:publish over ssh
  ①通过ssh部署Linux类服务器。
  ②可跟git或svn结合,直接拉取版本控制里的代码进行部署。对于php、python类的部署非常有用。

 

开始部署SSH管理服务器:

⑴部署前需要先添加ssh服务器
  Dashboard栏下"系统管理" -> 系统设置 -> 添加SSH服务器(最下面Puhlish over ssh栏"SSH Servers",新增)

 

 

   点击系统配置后,在新出的页面拉到最下面,看到"Publish over SSH",填写"Path to key = /root/.ssh/id_rsa",配置私钥的路径。

 

 

   然后在下面的"SSH Servers"栏配置,该SSH Server栏,对应的是公钥所在的服务器。

 

 

 

⑵Jenkins创建部署项目

配置好SSH服务器后,就可以在"我的视图"中,选择新建任务

 

 

新建任务"ssh_remote",选择自由风格,然后确定。

 

然后跳到"ssh_remote"任务的配置页面,选择"构建"栏,增加构建步骤 ,选择"Send files or execute commands over SSH"选项,然后选择指定的SSH服务器(这里就有个缺点:SSH构建需要一台一台的构建,即若需要对100台进行操作,则需要配置100台,量多时工作繁琐)。

 

 点击应用后,保存。然后"立即构建",看是否能执行成功。

 

 执行成功。

 

Jenkins创建任务时,通过复制的方法

补充:在新建任务时,也可以选择复制任务,之后再自己进行局部修改。

 

 

 

Publish Over Ssh部署的优点缺点


服务器数量少的,使用ssh管理方便
对于服务器数量过多时,配置繁琐: 添加ssh服务器繁琐,添加项目指定服务器繁琐

 


 

另外安全注意
Jenkins由于有直接管理服务器的权限,所以Jenkins网页一定要IP白名单、密码复杂度要高
Jenkins的权限要正确配置

 

 

 

 

 

 

 

posted @   浮~生  阅读(1432)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示