linux下scp提示文件名过长,Linux中crontab下scp文件传输的两种方式

Linux下文件传输一般有两个命令scp、ftp(工具需要下载安装)

本文主要讲讲scp的文件传输脚本

1、scp ssh-keygen -t rsa免输入密码,传输

这里假设主机A 用来获到主机B的文件。

在主机A的用户根目录下执行如下命令来生成配对密钥:

ssh-keygen -t rsa

遇到提示回车默认即可,两次回车后,显示完成。公钥被存到用户目录下.ssh目录,比如root存放在:

/root/.ssh/id_rsa.pub

将 .ssh 目录中的 id_rsa.pub 文件复制到 主机B 的 ~/.ssh/ 目录中,并改名为 authorized_keys,

到主机A中执行命令和主机B建立信任,例(假设主机B的IP为:192.168.100.4):

scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys (如果是集群之间实现秘钥免登录,authorized_keys里面的内容就只能累加,而不能这样直接修改文件名)

下面就可以用scp、ssh命令不需要密码来获取主机B的文件了

ssh 192.168.100.4 回车就不需要密码了。

注:其实id_rsa.pub内容添加到对方机器的authorized_keys中就行了

2、scp中使用expect 进行文件传输

脚本如下:

#!/bin/bashtime=`date +%Y%m%d_%H%M%S`

ip=`ifconfig eth0 |grep "inet addr"|awk -F ":" '{print $2}'|awk '{print $1}'` #获取机器的ip地址if [ ! -d /tmp/back ]; then

mkdir -p /tmp/backficd/tmp/backif [[ -d test ]]; then

rm -r -f /tmp/backfi

if [ $1 = "script" ]; then#获取运行脚本是传入的参数,根据不同的参数备份不同的文件if [ ! $2 ]; then

cp -r /home/www/scheduleshell /tmp/back #默认文件地址else

cp -r -f $2 /tmp/backfi

elif [ $1 = "crontab" ]; then

cp -r /var/spool/cron /tmp/backelse

echo "the words is not defined!"exit0

ficd/tmp/backpwd

tar -zvcf $ip-$time-$1.tar.gz ./*/usr/bin/expect -c " #expect语句部分,根据命令行提示输入密码,没有考虑容错部分 crontab 使用的环境变量可能与我们手动执行的时候有点不一致,运行的时候加上绝对路径会好一点

set timeout 10

spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.176:/home/hefeng/

expect "password:" {send "password"}

spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.182:/home/hefeng/

expect "password:" {send "password"}

expect eof

exit #使用interact 在crontab下运行会有点问题

"

if [ $? !=0 ]; then

echo "step for scp is failed"

exit 0

fi

rm -r -f /tmp/back/*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值