了解通过 SSH 运行时脚本的行为

Saa*_*hib 2 server ssh bash rsync

好吧,最近我一直面临着奇怪的行为。我有一个小的 bash 脚本,它只是远程获取 mysql 转储,然后将数据存储在服务器本身上,然后再同步到备份服务器。

#!/bin/sh
/usr/bin/ssh -p 82001 user@remotehost  "mysqldump -u db_user -pSomePass mydb" |  gzip -c >  /sql/mybackup.sql.gz
Run Code Online (Sandbox Code Playgroud)

但是我看到文件是在 /sql 下的本地服务器上创建的,而不是在远程服务器上创建的。

这是否意味着 mysqldump 正在远程服务器上工作,然后数据通过网络通过管道传输到这台本地机器,然后压缩并存储在此处所需的文件中......而不是远程?

A.B*_*.B. 5

管道符号后面的命令在gzip -c > /sql/mybackup.sql.gz本地机器上运行。

你应该使用

/usr/bin/ssh -p 82001 user@remotehost  "mysqldump -u db_user -pSomePass mydb |  gzip -c >  /sql/mybackup.sql.gz"
Run Code Online (Sandbox Code Playgroud)

例子:

% ssh user@host "echo remote" | echo local  
local
user@host's password:

% ssh user@host "echo remote | echo local"
user@host's password:
Run Code Online (Sandbox Code Playgroud)