@tony-yin
2018-01-10T23:45:00.000000Z
字数 1089
阅读 1958
Script
在此输入正文
场景:
需要将以下源主机上的三个文件拷贝到以下目的主机的对应目录下
src host: 192.168.1.1
dist host: 192.168.1.2
files: /root/1/1.txt, /root/2/2.txt, /root/3/3.txt
这时候如果手动做的话,将会很繁琐,所以这时候需要一个脚本能够实现文件的自动复制,并且脚本需要自动把密码验证的步骤也覆盖。
这里的关键就是如何实现shell
交互式命令行的自动化,这边可以用分界符EOF
,EOF
范围中的字符将会被作为命令输入到交互式命令行中,具体脚本如下:
SOURCEHOST=192.168.1.1
DISTHOST=$1
FILE1=/root/1/1.txt
FILE2=/root/2/2.txt
FILE3=/root/3/3.txt
FOLDER1=/root/1/
FOLDER2=/root/2/
FOLDER3=/root/3/
PASSWORD=123456
scp FILE1 ${DISTHOST}${Folder1} << EOF
$PASSWORD
EOF
scp FILE2 ${DISTHOST}${Folder2} << EOF
$PASSWORD
EOF
scp FILE3 ${DISTHOST}${Folder3} << EOF
$PASSWORD
EOF
调用方式:sh scp.sh 192.168.1.2
场景:
上面的场景是建立在登陆192.168.1
主机的基础上,现在我想我在任意主机上都可以实现上面将192.168.1.1
的上述文件拷贝到192.168.1.2
的对应目录下
这里的关键是实现ssh
的免密登陆,这时我们需要用到sshpass
,具体介绍可以自行搜索下,用法如下:
#! /bin/bash
SOURCEHOST=192.168.1.1
DISTHOST=$1
FILE1=/root/1/1.txt
FILE2=/root/2/2.txt
FILE3=/root/3/3.txt
FOLDER1=/root/1/
FOLDER2=/root/2/
FOLDER3=/root/3/
PASSWORD=123456
sshpass -p $PASSWORD ssh $SOURCEHOST \
sshpass -p $PASSWORD scp ${FILE1} ${DISTHOST}${FOLDER1} && \
sshpass -p $PASSWORD scp ${FILE2} ${DISTHOST}${FOLDER2} && \
sshpass -p $PASSWORD scp ${FILE3} ${DISTHOST}${FOLDER3}