可变目录名称在SCP上

我们有一个备份例程,以前在同一台服务器上从一个磁盘运行到另一个磁盘,但最近已经将源数据移动到远程服务器,并试图通过scp复制作业。

我们需要在目标服务器上运行脚本,并且在两台服务器之间build立了基于密钥的scp(不需要用户名/密码)。 使用scp来复制特定的文件和目录是完美的:

scp -r -p -B [email protected]:/mnt/disk1/bsource/filename.txt /mnt/disk2/btarget/ 

但是,我们之前的例程会迭代源磁盘上的目录以确定要复制哪些文件,然后通过gpgencryption单独运行它们。 有没有什么办法可以做到这一点,只有使用scp?

再一次,这个脚本需要从目标服务器运行,而作业运行的用户只有scp(无ssh)访问目标系统。

旧的工作看起来像这样:

 #Change to source dir cd /mnt/disk1 #Create variable to store # directories named by date YYYYMMDD j="20000101/" #Iterate though directories in the current dir # to get the most recent folder name for i in $(ls -d */); do if [ "$j" \< "$i" ]; then j=${i%/*} fi done #Encrypt individual files from $j to target directory cd ./${j%%}/bsource/ for k in $(ls -p | grep -v /$); do sudo /usr/bin/gpg -e -r "Backup Key" --batch --no-tty -o "/mnt/disk2/btarget/$k.gpg" "$/mnt/disk1/$j/bsource/$k" done 

任何人都可以build议如何通过从目标系统的SCP来做到这一点? 提前致谢。

编辑:我看到在这里飞来飞去的所有bash单线,我几乎没有想到在几秒钟内看到一些史诗般的东西,与猫,greppopup,也许是几个pipe道之间的“>>”或两个。 呃,好吧。 😉

使用cron在源服务器上运行类似版本的早期脚本,在那里存档并encryption所有文件到一个目录。 在此之后的适当时间间隔内,通过SSH位置在目标服务器rsync上拥有一个cron。 你可以scp但rsync有很多优点。

否则,我会放弃您的要求,并使用SSHpipe道从目标运行按需混合解决scheme。

我不知道,如果sshfs可以成为你的解决scheme。 这样你就不需要允许不受限制的ssh,甚至不需要改变你的bash脚本。 (我猜这样的performance会有些糟糕,也许你有额外的要求,不允许这种做法。)

更新:经过一些实验后,我已经制定了如何通过标准输出从目标服务器pipe道scp到gpg:

 scp -r -p -B [email protected]:/mnt/disk1/bsource/filename /dev/stdout | gpg -e -r "Backup Key" --batch --no-tty -o "filename.gpg" 

我认为对于另一半,我将在源服务器上运行sorting作业,并将生成的目录名输出到静态位置的文本文件中,该文件将先从目标系统中scp'd,然后cat'd进入源位置的variables。