[关闭]
@tony-yin 2018-01-10T23:45:00.000000Z 字数 1089 阅读 1958

scp免交互式和ssh免交互式脚本

Script


在此输入正文

scp

场景:

需要将以下源主机上的三个文件拷贝到以下目的主机的对应目录下

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交互式命令行的自动化,这边可以用分界符EOFEOF范围中的字符将会被作为命令输入到交互式命令行中,具体脚本如下:

  1. SOURCEHOST=192.168.1.1
  2. DISTHOST=$1
  3. FILE1=/root/1/1.txt
  4. FILE2=/root/2/2.txt
  5. FILE3=/root/3/3.txt
  6. FOLDER1=/root/1/
  7. FOLDER2=/root/2/
  8. FOLDER3=/root/3/
  9. PASSWORD=123456
  10. scp FILE1 ${DISTHOST}${Folder1} << EOF
  11. $PASSWORD
  12. EOF
  13. scp FILE2 ${DISTHOST}${Folder2} << EOF
  14. $PASSWORD
  15. EOF
  16. scp FILE3 ${DISTHOST}${Folder3} << EOF
  17. $PASSWORD
  18. EOF

调用方式:sh scp.sh 192.168.1.2

ssh

场景:

上面的场景是建立在登陆192.168.1主机的基础上,现在我想我在任意主机上都可以实现上面将192.168.1.1的上述文件拷贝到192.168.1.2的对应目录下

这里的关键是实现ssh的免密登陆,这时我们需要用到sshpass,具体介绍可以自行搜索下,用法如下:

  1. #! /bin/bash
  2. SOURCEHOST=192.168.1.1
  3. DISTHOST=$1
  4. FILE1=/root/1/1.txt
  5. FILE2=/root/2/2.txt
  6. FILE3=/root/3/3.txt
  7. FOLDER1=/root/1/
  8. FOLDER2=/root/2/
  9. FOLDER3=/root/3/
  10. PASSWORD=123456
  11. sshpass -p $PASSWORD ssh $SOURCEHOST \
  12. sshpass -p $PASSWORD scp ${FILE1} ${DISTHOST}${FOLDER1} && \
  13. sshpass -p $PASSWORD scp ${FILE2} ${DISTHOST}${FOLDER2} && \
  14. sshpass -p $PASSWORD scp ${FILE3} ${DISTHOST}${FOLDER3}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注