`
kkiiiu
  • 浏览: 22547 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Shell Script传输文件

阅读更多

项目里用到需要做个Shell Script小程序用来在不同的服务器之间传输TXT文件。

总共有三个服务器:App Server,Web Server,External Server[External Server对外开放FTP]

目的:将App Server产生的TXT文件通过Web Server传输到External Server


这些服务器之间设置了防火墙,关闭了大多数的端口。考虑到这点,在App Server传文件到Web Server使用scp[Secure Copy]来传输到Web Server。而Web Server到External Server则用它开放的FTP来传输。

 

本来的做法:所有的文件传输都在Web Server上做,但是这样是有漏洞的。如果Web Server被黑了,那么App Server就被暴露,很危险。

改进的做法:先将TXT文件传输由App Server传输到Web Server,再由App Server调用Web Server上的Shell Script通过FTP传输文件给External Server。这样可以避免上面的问题。

 

 

具体实现如下:

 

#!/bin/sh
#
# Note: this file is put on App Server
#
# YPS:  1. copy file from App Server to Web Server
#	     2. run sh file in Web Server
#	        1) send file to External Server
#	        2) send mail for noticing
# Author: Johnny.L
# Date: 2008-11-17
#

# If enter parament
if [ -z $1 ]; then
	echo "If there is no date selected by user. System will default it to today's date."
else
	echo "Date entered by user is: $1"
fi

# If YPS List is exist
if [ -f $APP_SERVER_YPS_LIST_DIR/$YPS_LIST_NAME ]; then
	echo "$YPS_LIST_NAME is already exist in the specified folder!"
	
	echo
	echo "Transferring file from Application server to Web server..."
	echo

	# Send YPS List to Web Server
	scp $APP_SERVER_YPS_LIST_DIR/$YPS_LIST_NAME $WEB_SERVER:$WEB_SERVER_YPS_LIST_DIR/

	# If send YPS List successfully
	if `ssh $WEB_SERVER 'ls "'$WEB_SERVER_YPS_LIST_DIR/$YPS_LIST_NAME'" >/dev/null'`; then
		echo
		echo "File transferred successfully!"
		
		echo
		echo "Run Web server Shell Script..."

		# Sent successfully then run Web Server sh file to
		# send YPS List to Yellow Page Server
		# and send email to notice somebody
		ssh $WEB_SERVER sh $WEB_SERVER_SS $1
	else
		echo "File transfer to Web server failed!"
	fi
else
	echo "$YPS_LIST_NAME is NOT exist in Application server or Web server!"
	echo "1. Date entered by user is XXX. Please ensure the date is correct."
	echo "2. Please check Application server's scheduler, if the TXT file generated successfully."
fi

exit 0

 

 

#!/bin/sh
#
# Note: this file is put on Web Server
#
# YPS: 1. send file to External Server via ftp
#           2. send mail for noticing
# Author: Johnny.L
# Date: 2008-11-17
#

# If enter parament
if [ -z $1 ]; then
	echo "If there is no date selected by user. System will default it to today's date."
else
	echo "Date entered by user is: $1"
fi

# If YPS List is exist
if [ -f $WEB_SERVER_YPS_LIST_DIR/$YPS_LIST_NAME ]; then
	echo
	echo "$YPS_LIST_NAME is already exist in the specified folder!"

	# Go to Web Server YPS LIST Folder
	cd $WEB_SERVER_YPS_LIST_DIR	
	
	echo
	echo "Transferring file to FTP server..."

	# ftp YPS List to Yellow Page Server
	echo put $YPS_LIST_NAME | ftp -v $YELLOW_PAGE_SERVER >> $YPS_LOG_FILE
else
	echo
	echo "$YPS_LIST_NAME is NOT exist in Application server or Web server!"

	echo "1. Date entered by user is $1. Please ensure the date is correct."
	echo "2. System may encountered problem when try to transfer file from Application server to Web server, 
			OR, the mentioned file is NOT exist in Application server."
fi

# Send an email using mailx
mailx -s "$SUBJECT" -a "$YPS_LOG_FILE" -c "$CCTO" "$EMAIL" < "$ABS_PATH"/"$MAIL_TEMPLETE"
echo
echo "Sending email..."

sleep 1

echo
echo "Email has been sent to $EMAIL."
echo "and Cc to $CCTO."

echo
echo "Email sent successfully!"
echo
 

 


第一个程序块是在App Server中的,它会调用第二个程序块,第二个在Web Server中。

 

当然,这之前还要解决login without password的问题,不管是scp或者ftp都存在这样的问题。

 

解决如下:

 

1. SSH/SCP login without password:

    a. 用dsa加密,生成一个key...

        ssh-keygen -t dsa 

    b. 拷贝生成的key文件id_dsa.pub去需要ssh的机器上面,不过下面的一句话拷贝好像有时行,有时不行。如果不行,得自己拷贝id_rsa.pub到要登录的~/.ssh/目录下
        ssh johnny.lv@192.168.1.122 "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys"


2. FTP login without password:
    a. 用vi打开/新建一个名为.netrc的文件

        vi .netrc
    b. 放置以下内容:

        machine 192.168.1.192
        login developer
        password 123456

 

OK...完成...

分享到:
评论

相关推荐

    shell_script.zip

    "shell_script.zip"这个压缩包文件包含了多个与shell脚本相关的文件,如POL_TPOL_COVER.sh、RERUN_AGENCY.sh等,这表明这些脚本可能是用于特定系统或应用程序的自动化操作。 1. **Shell脚本基础**:Shell脚本是基于...

    Linux&SHELL;基本知识笔试试卷

    - 使用 `sh $shell_script` 或 `./$shell_script` 来在一个新的子 shell 中执行脚本。 #### SHELL 脚本结构 - **知识点**:SHELL 脚本的基本结构包括: - 循环结构:例如 `for`、`while` 循环。 - 选择结构:...

    linux下采用shell编程和ftp实现文件采集功能

    - 使用`crontab -e`打开编辑器,添加一条定时任务,例如每小时执行一次shell脚本:`0 * * * * /path/to/script.sh`。 6. **编写shell脚本实现文件采集**: - 在shell脚本中,使用上述FTP命令,并结合错误处理和...

    9 Shell命令行操作.rar

    - **bash shell script**:编写bash脚本,自动化重复性任务。 6. **进程管理**: - **ps**:显示当前系统中的进程状态。 - **kill** 和 **killall**:发送信号给一个或多个进程,终止它们的运行。 - **nohup**...

    批处理实现自动传输FTP服务器文件

    ### 批处理实现自动传输FTP服务器文件:详细解析与实践指南 #### 一、FTP基础知识概览 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的协议,它允许用户在不同的计算机之间上传和下载文件。无论是...

    Linux shell编程

    在本文中,我们将深入探讨Linux Shell的基本概念、Shell编程基础、输出和输入、运算符以及Shell脚本文件的创建和使用。 首先,让我们了解一下**Shell的基本概念**。Shell是Linux系统中的一个命令解释器,它为用户...

    Linux下清理数据库shell脚本

    - 将备份文件传输到安全的位置(如另一台服务器或云存储)。 - 可选地,对备份文件进行加密和压缩,以节省存储空间和提高安全性。 - 记录备份活动,包括备份时间、状态等信息,便于日后审计和故障排查。 3. **...

    linux平台shell命令大全

    在Linux操作系统中,Shell是...通过熟练掌握这些shell命令,你可以有效地管理文件,自动化日常任务,以及进行系统维护和故障排查。shell是Linux世界中的强大工具,深入学习并熟练运用它,能让你在Linux环境中如鱼得水。

    Linux Shell编程.

    一些特殊变量由 Shell 自动设置,例如 `$0` 表示脚本名称,`$#` 表示传给脚本或函数的参数个数。 ##### **2.7 环境变量** 环境变量可以在整个系统范围内设定,并在所有 Shell 会话中生效,例如 `PATH`、`HOME` 等...

    java调用shell向DataX传参,带where条件,特殊字符

    String command = "sh /path/to/your/shell_script.sh arg1 'arg with space and special char like ; & ()'"; Process process; try { process = Runtime.getRuntime().exec(command); // 获取输出流并处理...

    Java版Linux文件上传下载、windows本地文件上传下载

    对于Linux和Windows之间的文件传输,可以利用SSH(Secure Shell)协议,Java中的JSch库是一个常用的实现方式。JSch允许你连接到远程服务器,执行命令,包括上传和下载文件。以下是一个简单的文件上传示例: ```java...

    shell 和 XFtp6

    总的来说,Shell和XFtp6的结合使用能够有效地简化和自动化Linux系统中的文件传输操作,尤其适用于需要定期或批量处理文件的场景。通过学习和掌握Shell脚本编程,可以进一步提升你在IT工作中的生产力和灵活性。

    OSN-ShellScript.rar_matlab例程_Others_

    【标题】"OSN-ShellScript.rar" 是一个与操作系统(OS)和网络相关的压缩文件,其中包含了使用MATLAB编写的示例脚本。这个压缩包可能是为了教授或演示如何在MATLAB环境中处理操作系统和网络相关的问题。"matlab例程...

    远程控制主机的SHELL自动化管理 案例

    本案例将探讨如何利用SHELL脚本来定时获取远程主机上的Perl脚本执行结果,并将其记录到本地文件中。 首先,我们需要了解SHELL脚本的基本结构。一个简单的SHELL脚本通常由变量声明、条件语句、循环语句以及命令行...

    解析器:用纯POSIX shellscript编写的CSV,JSON,XML文本解析器和生成器

    POSIX Shellscript是一种遵循POSIX标准的Unix shell,它提供了一组标准的命令和工具,如`grep`、`sed`、`awk`等,这些工具在处理文本时非常强大。编写Shell脚本解析器的关键在于利用这些工具的组合,通过管道连接将...

    Linux Shell Scripting(linux shell编程)

    - 使用`ftp`或`scp`进行文件传输。 - 使用`mysqldump`备份MySQL数据库。 #### 七、版权许可信息 - **许可类型**:此书遵循Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported许可协议。 - **...

    linux shell 编程入门

    Shell 脚本是通过编写一系列命令并保存在一个文件中的方式来实现自动化任务的。编写 Shell 脚本的基本步骤包括: 1. **指定解释器**:在脚本的第一行使用 `#!/bin/sh` 或 `#!/bin/bash` 等形式指定脚本使用的 Shell...

    操作系统 简单shell编程.docx

    1. 使用文本编辑器(如vi)创建文件,输入Shell命令,保存为.sh文件。 2. 通过命令赋予脚本执行权限,如`chmod a+x scriptname.sh`。 3. 执行脚本的方式有三种: - 输入重定向:`sh &lt; scriptname.sh` - 直接运行:...

    Java调用shell脚本

    总的来说,Java调用shell脚本提供了一种强大的方式来集成系统级操作,比如SFTP文件传输,到Java应用程序中。这使得开发者能够利用Java的灵活性和shell脚本的便利性,共同完成复杂任务。通过了解并熟练运用这些技术,...

Global site tag (gtag.js) - Google Analytics