我发现很难总结我的头一轮这一点。
我试图完成一些很简单这是定期从一个Linux系统到另一个通过本地计算机上的脚本复制文件。
遥控系统在存储器非常有限,因此不支持cron或许多常见的库。唯一的办法是永远运行一个脚本,我宁愿不做。它确实有它和ssh SCP连接到它
我想从我的本地机器ssh到远程机器上,运行发现的所有文件命令不到一天的时间了。
我想,然后使用这个结果和形式对其进行处理
scp [email protected]:"file1.sh file2.txt file3.jpg" /destination
目的地址为本地的位置。它甚至会更好,如果我可以重命名文件,包括文件作为其在目标文件夹名的完整路径。
编辑1:
一些进展我用下面的命令来获取文件的列表,我想复制
ssh [email protected] 'cd /tmp && find -name *.mp4 -mtime -1'
我必须手动输入密码,所以,虽然这可以作为脚本的一部分运行
要在不输入密码进行转移,你必须决定哪台机器应该信任对方。如果两台主机SRC(主机与文件)和DEST(主机中拷贝会去),然后要么SRC必须信任DEST,或DEST必须信任SRC(或两者)。
比方说,SRC会信任DEST,但我们不希望DEST信任SRC。
连接和运行而无需用户交互副本,你将不得不在DEST中存储未加密密码的等价物。由于显而易见的原因,这不是一个好主意,但也有办法把风险降到最低。
一种选择是安装像sshpass
命令,但那时你就真的需要离开未加密的密码躺在附近,所以我不建议使用这种方法,除非你真的不得不这样做。
更好的方法是建立在两台机器之间的公钥认证。通常情况下这一点,你产生被加密存储的私钥。您键入密码时,你想用它来打开它,或者你一次解锁并将其加载到像ssh-agent
的程序。后者可能是preferrable方法(密钥存储在内存中加密的,但攻击者必须具有以利用它已经取得root权限。显然有人用root访问权限可能只是记录你在你键入密码)。
我们能避免存储的私钥加密的初始密码进入。如果我们不采取特别的预防措施,显然有对DEST存储未加密的私钥等同于留下密码SRC躺在附近。这不好。为了尽量减少风险,我们可以配置SRC,以便它不允许DEST连接并运行任意命令。我们可以指定只需要一个命令(姑且称之为命令)就可以了。如果我们细心,这在某种程度上缓解风险。
所以,我们决定配置DEST能够无需任何密码输入上SRC运行命令。由于我们在Linux上,我们可能正在使用openssh
。这里有一个方法来设置事情:
dest:~$ cd ~/.ssh
dest:~/.ssh$ ssh-keygen -b 2048 -t rsa -N '' -f src-cmd
dest:~/.ssh$ ( echo -n 'command="/home/usr/mkfilelist" '; cat src-cmd.pub ) |\
ssh usr@src 'mkdir -p .ssh; cat >> .ssh/authorized_keys'
/home/usr/mkfilelist
(如果存在的话!)没有被要求输入密码:dest$ ssh usr@src -i ~/.ssh/src-cmd
为了获得更大的安全性,因此,从DEST只连接被允许考虑使用from=DEST,command=...
。请参阅:的authorized_keys(5)血淋淋的细节。
现在,我们需要写/home/usr/mkfilelist
。
这些天来,rsync
是同步两套文件夹的文件之间一个很好的计划,但我要承担SRC提供历史UNIX的大路货:cpio
!
cpio
读取文件名的标准输入列表,并输出一个“归档”,或读取“归档”,并创建了文件。这将与您find命令很好地工作:
#!/bin/bash
cd /PATH/TO/SRCFILES
find . -mtime -1 -name '*.mp4' -type f -print | cpio -o
需要注意的重要一点是,这将喷涌的“档案”到标准输出(所以不要尝试运行它,除非你重定向到一个文件)。还要注意的是,你应该确保发现不输出与/
(因此cd
和使用.
的)开始的任何文件路径。
修改您的查找条件品尝和保存作为SRC /home/usr/mkfilelist
。
使其可执行(chmod +x /home/usr/mkfilelist
)。
现在,我们可以把这些作品放在一起,你可以从cron DEST上运行脚本:
#!/bin/bash
cd /PATH/TO/DESTFILE
ssh usr@src -i ~/.ssh/src-cmd | cpio -i
这可连接多达SRC,导致产生了“档案”。这是管道输送到cpio
运行中提取文件的DEST适当的文件夹。