Answers:
解决方案1:
remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path
通过连接到远程计算机,运行一些命令,然后将输出复制到本地计算机上的变量来工作。说,远程回显文件路径,在本地捕获它。
解决方案2:
ssh user@host "determine_path; cat filename" >local_filename
这可以通过直接从远程查找并输出文件,然后将其重定向到本地文件来实现。这将跳过scp。这要求“ cat”之前的步骤没有输出(您可以使用&> / dev / null解决此问题)。
您可以采用以下格式编写脚本:
command1
command2
...
ssh user@machine command3
...
command4
command5
您需要设置SSH密钥才能command3
执行而不会提示您输入密码。
ssh user@remote command3
运行时,command4
无法启动
ssh user@machine command3 &
我假设您已经对如何识别要复制的文件有所了解,并且已经能够或已经编写了脚本或命令集,这些脚本或命令集可以在进行此识别的远程计算机上运行。
此外,我还将假定这些命令在标准输出上打印文件的完整路径,或相对于用于复制的SSH用户的主目录的文件的相对路径。在我的示例中,脚本的名称为“ getfilepath.sh”,尽管它不一定是shell脚本,但它可以是其他可执行文件,甚至是一系列命令。
# Script to be executed on local machine.
# put any leading local commands here.
FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .
# put any trailing local commands here.
在上面的代码中,“ $()”表示法是一种将命令的标准输出捕获为shell变量的方法。这是相当标准的,但是如果您使用的外壳不了解它,则可以用“反斜杠”将命令括起来,反斜杠是大多数美式键盘上1键左侧的重音符号。