批处理程序:自动上传FTP,再登陆linux服务器执行更新

----转载请注明出处:博客园-邦邦酱好

最近在学批处理程序,一直没找到能够结合工作来使用它的地方,前几天测试服务端的时候突然想到可以这样做:

写一个批处理程序,自动通过FTP上传软件包到指定的地方,然后自动登录Linux服务器,解压缩软件包,进行服务端的更新。

先看一下总的调度脚本Auto_Update.bat

先让用户输入服务器的地址,再选择要执行的操作。

@echo off&setlocal enabledelayedexpansion
::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::相关配置::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
::服务器地址
::set url=192.168.0.12

::本地最新程序包的地址
set SourceAddress=D:\testFTP

::FTP上存放程序包的地址
set TargetAddress=/upload

::FTP到服务器的用户名和密码
set FtpName=abcFTP
set FtpPassword=123

::telnet上服务器时的用户名和密码
set userid=abcLinuxset password=123456

::解压缩文件所在的目录
set untarDir=/tmp/upload

::4次拷贝
set copy1=cp /tmp/upload/dst/a.dat /app/ -f
set copy2=cp /tmp/upload/lis/b.dat /lis/ -f
set copy3=cp /tmp/upload/cs /Lis/ -rf
set copy4=cp /tmp/upload/test_ci /app/ -f

::运行程序所需要用到的目录名和命令
set do1_dir=/Lis/set do1=./m.sh
set do2_dir=/app/set do2=./test_ci

echo 请输入你要执行操作的服务器地址:
set /p url=
:repeat
echo.
echo.
echo ############请选择要执行的操作###########
echo ----1.输入数字1并按回车键,则进行自动上传程序包到FTP服务器的操作
echo ----2.输入数字2并按回车键,则直接执行更新操作(用户已手动上传程序包)
echo ----3.输入数字3并按回车键,则自动上传程序包并更新程序
echo ----4.输入exit并按回车键,则终止脚本
echo 请输入:
set /p choice=

::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::程序包上传FTP::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
if "%choice%"=="1" (
    echo 请确认你已经把程序包放到本地指定目录下(y/n):
    set /p yn=
    if /i "!yn!"=="n" (
        set yn=
        goto end
    )
    echo 开始上传本地最新的程序包到服务器上...
    call Upload_Ftp.bat
    echo 上传完毕
    goto repeat
)

::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::执行更新操作:::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
if "%choice%"=="2" (
    echo 本次操作将进行初始化操作,请确认已经重启过服务器(y/n):
    set /p yn=
    if /i "!yn!"=="n" (
        set yn=
        goto end
    )
    echo 开始登陆服务器进行更新操作...
    call Run_The_Program.bat
    goto repeat
)

::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::上传并更新:::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
if "%choice%"=="3" (
    echo 本次操作将上传并更新程序,请确认程序包已在本地指定目录下,并已重启过服务器(y/n):
    set /p yn=
    if /i "!yn!"=="n" (
        set yn=
        goto end
    )
    echo 开始上传本地最新的程序包到服务器上...
    call Upload_Ftp.bat
    echo 上传完毕
    echo.
    echo 开始登陆服务器进行更新操作...
    call Run_The_Program.bat
    goto repeat
)
echo.
echo.

if "%choice%"=="exit" (
    echo 你输入了%choice%字符,批处理自动退出
    goto end
)

echo 无法识别指令,请重新输入
goto repeat

:end
set choice=
echo 脚本终止!

接着是上传FTP的脚本Upload_Ftp.bat:

不能单独运行此脚本,因为它所需的变量都在总调度脚本中。

@echo off

::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::上传过程::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
rem 登陆FTP
echo open %url% > AutoFtp.ftp
rem 输入用户名和密码进行登陆
echo user %FtpName% %FtpPassword%>> AutoFtp.ftp
echo binary >> AutoFtp.ftp
rem 切换到FTP的某个目录下
echo cd %TargetAddress% >> AutoFtp.ftp
rem 切换到本地的某个目录下
echo lcd %SourceAddress% >> AutoFtp.ftp
rem 设定为:无需用户对每个文件进行确认
echo Prompt off >> AutoFtp.ftp
rem 开始上传
echo mput * >> AutoFtp.ftp
echo bye >> AutoFtp.ftp
echo quit >> AutoFtp.ftp

::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::执行上传::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
ftp -n -s:AutoFtp.ftp
del AutoFtp.ftp

最后是服务端的更新脚本Run_the_Program.bat:

不能单独运行此脚本,因为它所需的变量都在总调度脚本中。

@echo off
echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs
::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::登录::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
echo WScript.Sleep 1000 >>telnet_tmp.vbs
echo sh.SendKeys "%userid%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 1000 >>telnet_tmp.vbs
echo sh.SendKeys "%password%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 2000 >>telnet_tmp.vbs
::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::解压缩:::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
echo 开始进行解压缩...
echo sh.SendKeys "cd %untarDir%{ENTER}" >>telnet_tmp.vbs
echo sh.SendKeys "tar -zxvf H{TAB}" >>telnet_tmp.vbs
echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 2000 >>telnet_tmp.vbs
::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::拷贝文件到指定目录:::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
echo 开始进行拷贝操作...
echo sh.SendKeys "%copy1%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 5000 >>telnet_tmp.vbs
echo sh.SendKeys "%copy1%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 10000 >>telnet_tmp.vbs
echo sh.SendKeys "%copy1%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 10000 >>telnet_tmp.vbs
echo sh.SendKeys "%copy1%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 10000 >>telnet_tmp.vbs
::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::运行程序::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::
echo 跳转目录,开始进行初始化环境...
echo sh.SendKeys "cd %do1_dir%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 1000 >>telnet_tmp.vbs
echo sh.SendKeys "%do1%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 15000 >>telnet_tmp.vbs

echo 跳转目录,开始正式运行程序...
echo sh.SendKeys "cd %do2_dir%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 1000 >>telnet_tmp.vbs
echo sh.SendKeys "%do2%{ENTER}" >>telnet_tmp.vbs
echo WScript.Sleep 10000 >>telnet_tmp.vbs
::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::开始执行:::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::
echo 开始登陆服务器%url% ..
start telnet %url%
cscript telnet_tmp.vbs
del telnet_tmp.vbs

程序运行已经通过的,不过我修改了一些服务器信息(公司资料要保密嘛~~~~(>_<)~~~~ ),如果有任何问题,欢迎指正~~

运行的时候只需要在windows下使用cmd.exe窗口,切换到以上三个程序的所在目录,输入Auto_Update.bat按下回车键即可。

时间: 2024-12-20 20:54:37

批处理程序:自动上传FTP,再登陆linux服务器执行更新的相关文章

如何在secureCTR上使用公钥登陆Linux服务器?

我以前一直使用口令通过ssh协议登陆Linux服务器,最近公司要求使用公钥登陆.说是安全,好吧.那我们整一下.那到底使用公钥登陆服务器有什么好处呢?其实我理解是这样的: 当我们创建了公钥和私钥(这是一对,登陆时要使用私钥解密公钥)后,把公钥给任何服务器,登陆Linux服务器时,只要我们的私钥不变,登陆任何服务器都是不需要密码的.而是使用公钥私钥进行身份验证.安全的多!这里也隐含了一个小细节,就是不要把你的私钥给丢了.否则,你想想,几百台服务器上好不容易把你的公钥配置好,而你的私钥丢失,怎么办?私

SecureCRT上使用公钥登陆Linux服务器

SecureCRT部分配置 1.首先生成公钥. 打开SecureCRT(我的版本为7.0,估计其他版本基本相同)程序,点击菜单栏的“工具”->“创建公钥”.按照步骤执行.其中一步比较重要就是选择公钥的格式.建议选择“OpenSSH”,否则在服务器端使用时需要转换为OpenSSH各式.何必多次一举呢.所以这里必须选择“OpenSSH”.如果选错了.重新生成一次就可以了. 然后选择公钥私钥存放的地方.默认Identity是私钥,Identity.pub是公钥. 2.把Identity.pub文件上传

ahjesus SSHkey登陆linux服务器,无需密码,ubuntu

cd ~/.ssh/如果目录不存在就新建一个 mkdir ~/.ssh制作公匙 ssh-keygen -t rsa默认会生成id_rsa.pub的公匙将公匙推送到指定的服务器 scp id_rsa.pub [email protected]:~/.ssh/id_rsa.pub登录到服务器 ssh [email protected]执行如下命令cd ~/.sshcat id_rsa.pub >> authorized_keys销毁目录下公匙 rm id_rsa.pub退出服务器 exit 下次登

在linux终端远程登陆linux服务器

在linux终端远程登陆linux服务器 原来在Linux终端远程登陆linux服务器是那么的容易,如果的服务器用户名是abc(也可以是root),只需要在终端输入: 然后电脑会提示输入密码就登录服务器了. 如果想在系统之间传送文件使用scp指令完成. 例如:从服务器下载文件到本机中. scp [email protected](服务器):/home/abc/xxxx(文件)  /xxxx(本机目录) 之后提示输入abc用户的密码: 反之,从本机上传文件到服务器: scp /xxxx(本机目录)

【转】Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

pom.xml jar 包支持 <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.53</version> </dependency> 代码: package com.spring.bean.annotation; import java.io.BufferedReader; import

Linux服务器执行yum update不成功

Linux服务器执行yum update报错提示: Loaded plugins: fastestmirror, refresh-packagekit, security You need to be root to perform this command. Centons下其大概意思是fastestmirror不能使用,fastestmirror是yum的一个加速插件,具体我也没有仔细了解过,可能是系统不支持或者缺少组建导致的.处理办法就是禁用这个插件,方法如下:[email protect

PuTTY 连接 linux 服务器执行 make menuconfig 乱码问题解决

PuTTY 连接 linux 服务器执行 make menuconfig 时可能出现乱码,如下图所示: 有两个方法解决这个问题: 方法一: 修改 PuTTY 配置如下图所示: 方法二: 在 -/.bashrc 配置文件中添加环境变量: export NCURSES_NO_UTF8_ACS=1 修改后正常显示效果: 原文地址:https://www.cnblogs.com/gctech/p/11005855.html

使用ssh公钥密钥自动登陆linux服务器

作为一名 linux 管理员,在多台 Linux 服务器上登陆进行远程操作是每天工作的一部分.但随着服务器的增多,每次登陆,系统都会提示输入用户名和密码,频繁的输入用户名和密码是一件让人很烦的事情.也许有人说可以用一些客户端工具,比如:SecureCRT 等,的确使用这些软件会方便很多,但是这些软件不是价格昂贵的商业软件就是依附于特定平台才能安装使用,所以我今天介绍的是使用 ssh 自带的功能实现使用客户端工具所能带来的便利,那就是使用 ssh 的公钥密钥实现自动登陆. 测试环境:操作系统:Re

CRT通过密钥登陆Linux服务器

第一步是创建公钥 1.首先用CRT创建密钥,下图是图示: 密钥长度默认就可以,越大越安全 上图中选择OpenSSH密钥格式,这样在后面就不用再转格式,在早起可能不能直接生成OpenSSH密钥格式,需要转换.我的版本可以直接生成.下面是转换的命令 ssh-keygen–i –f Identity.pub 最后点击完成,会弹出如下图示,一个我选择的是否,也可以选择是. 可以在之前的文件目录中找到刚才的私钥和公钥文件 因我并没有更改这个地址,所以默认是C:\Users\Administrator\Do