来自本地机器的shell脚本在远程机器上执行命令,然后在本地机器上继续

gns*_*nsr 10 ssh sh

问题是:我想从远程机器复制文件。

我正在寻找一种方法来编写一个 shell 脚本,该脚本将连接到远程机器,获取存储文件的位置,一旦我获得了与远程服务器断开连接的位置,并从本地机器中使用 scp 获得的位置到复制文件。

具体来说,我想知道如何通过脚本连接到远程机器,在该机器上执行任务。断开连接,并在本地继续执行。

Kha*_*led 20

您可以按以下格式编写脚本:

command1
command2
...
ssh user@machine command3
...
command4
command5
Run Code Online (Sandbox Code Playgroud)

您需要设置 SSH 密钥才能在command3不提示您输入密码的情况下执行。

  • @aaaaaa 除非你做了`ssh user@machine command3 &` (3认同)
  • @Isaac 是的,我的观点是,这两种行为都可能是可取的行为,但应该是有意识的决定 (3认同)
  • 需要注意的是,这将是同步的。当 `ssh user@remote command3` 正在运行时,`command4` 无法启动 (2认同)

小智 15

解决方案1:

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path
Run Code Online (Sandbox Code Playgroud)

这通过连接到远程机器、运行一些命令并将输出复制到本地机器上的变量来实现。比如说,远程回显文件路径,在本地捕获它。

解决方案2:

ssh user@host "determine_path; cat filename" >local_filename
Run Code Online (Sandbox Code Playgroud)

这是通过直接从远程查找和输出文件,并将其重定向到本地文件来实现的。这会跳过 scp。这要求“cat”之前的步骤没有输出(您可以使用 &>/dev/null 解决)。