对日开发 TeraTerm 批量向各台服务器传输文件

发布于:2025-07-20 ⋅ 阅读:(13) ⋅ 点赞:(0)


一. 作业背景

⏹目前工作的现场,需要将指定的若干个sql文件在指定的一台服务器上编辑完成之后,再通过scp命令将文件传输到各台指定的服务器中。简单来说,就是需要手动指定如下的若干条命令。

scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd101d:/work/
scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd102d:/work/
scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd103d:/work/
# ......
scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd116d:/work/

😵由于进行的是商用作业,各台服务器之间并没有配置免密码登录,这就导致每执行一次,都需要手动输入密码。容易出错不说,效率即为低下。

😓目前只有16台服务器还好说,如果要传输160台服务器呢?难不成我要手动执行160次scp命令,然后再手动输入160次密码吗?


二. 循环scp命令

⏹因为要向各台服务器传入的文件以及目标服务器的路径都是相同的,很容易会想到下面这种做法

# 将要执行的scp命令打印到控制台上,检查
for i in {101..116}; do echo "scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd${i}d:/work/"; done

# 通过循环scp命令,执行文件传输
for i in {101..116}; do scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd${i}d:/work/; done

🤔通过上面这种方式,解决了多次手动执行scp命令的问题,那么有没有办法让其自动输入密码呢?


三. 使用TeraTerm的ttl脚本

3.1 脚本编写

⏹模拟scp命令传输文件的ttl脚本

for i 101 116

	; 数字抓换为字符串
	int2str strNum i
	; 模拟执行scp命令
	sendln 'echo "scp -p ./amt_chg.sql ./awt_chg.sql spluser@c1hd' strNum 'd:/work/"'
	wait '$'
	
	; 根据实际服务器的提示符情况, 在此处添加密码输入的代码
	
	; 添加空格, 保持美观
	sendln 'echo'
	wait '$'
	
next

3.2 使用脚本与效果

⏹使用TeraTerm的话,即使已经登录成功之后,也可以运行ttl脚本。

在这里插入图片描述

⏹模拟scp命令执行的效果如下

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到