在远程服务器复位运行命令会导致本地处理和运行远程服务器上的另一个命令

问题描述 投票:-1回答:1

我发现很难总结我的头一轮这一点。

我试图完成一些很简单这是定期从一个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'

我必须手动输入密码,所以,虽然这可以作为脚本的一部分运行

ssh find remote-server scp
1个回答
0
投票

SSH without typing passwords

要在不输入密码进行转移,你必须决定哪台机器应该信任对方。如果两台主机SRC(主机与文件)和DEST(主机中拷贝会去),然后要么SRC必须信任DEST,或DEST必须信任SRC(或两者)。

比方说,SRC会信任DEST,但我们不希望DEST信任SRC。

连接和运行而无需用户交互副本,你将不得不在DEST中存储未加密密码的等价物。由于显而易见的原因,这不是一个好主意,但也有办法把风险降到最低。

一种选择是安装像sshpass命令,但那时你就真的需要离开未加密的密码躺在附近,所以我不建议使用这种方法,除非你真的不得不这样做。

更好的方法是建立在两台机器之间的公钥认证。通常情况下这一点,你产生被加密存储的私钥。您键入密码时,你想用它来打开它,或者你一次解锁并将其加载到像ssh-agent的程序。后者可能是preferrable方法(密钥存储在内存中加密的,但攻击者必须具有以利用它已经取得root权限。显然有人用root访问权限可能只是记录你在你键入密码)。

我们能避免存储的私钥加密的初始密码进入。如果我们不采取特别的预防措施,显然有对DEST存储未加密的私钥等同于留下密码SRC躺在附近。这不好。为了尽量减少风险,我们可以配置SRC,以便它不允许DEST连接并运行任意命令。我们可以指定只需要一个命令(姑且称之为命令)就可以了。如果我们细心,这在某种程度上缓解风险。

Configuring OpenSSH

所以,我们决定配置DEST能够无需任何密码输入上SRC运行命令。由于我们在Linux上,我们可能正在使用openssh。这里有一个方法来设置事情:

  1. 创建DEST密钥对:
dest:~$ cd ~/.ssh
dest:~/.ssh$ ssh-keygen -b 2048 -t rsa -N '' -f src-cmd
  1. 复制公钥SRC,限制使用一个特定的命令:
dest:~/.ssh$ ( echo -n 'command="/home/usr/mkfilelist" '; cat src-cmd.pub ) |\
        ssh usr@src 'mkdir -p .ssh; cat >> .ssh/authorized_keys'
  1. 现在,它是从DEST可以对SRC运行命令/home/usr/mkfilelist(如果存在的话!)没有被要求输入密码:
dest$ ssh usr@src -i ~/.ssh/src-cmd

为了获得更大的安全性,因此,从DEST只连接被允许考虑使用from=DEST,command=...。请参阅:的authorized_keys(5)血淋淋的细节。

Collecting the files

现在,我们需要写/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)。

Putting it all together

现在,我们可以把这些作品放在一起,你可以从cron DEST上运行脚本:

#!/bin/bash

cd /PATH/TO/DESTFILE
ssh usr@src -i ~/.ssh/src-cmd | cpio -i

这可连接多达SRC,导致产生了“档案”。这是管道输送到cpio运行中提取文件的DEST适当的文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.