我正在实施一个自动备份方案,因此我创建了一个 shell 脚本,该脚本首先为所有 MySQL 数据库创建 SQL 转储,然后从/var/www
远程服务器的目录中检索所有网站。后者正在运行,因为我正在使用 rsync 获取远程文件。
但是,检索到的 MySQL 转储来自本地服务器,这不是我想要的。我还想从远程服务器获取 SQL 转储。
我在本地和远程服务器之间有一个隧道,我可以不使用任何密码来连接它(我将公钥添加到authorized_hosts),所以我尝试将以下代码添加到脚本中:
ssh [email protected]
然后我尝试检索 SQL 转储并退出远程服务器。但是这不起作用,因为我仍然必须在终端中手动输入 exit 才能从远程主机检索 SQL 转储。我不知道为什么会发生这种情况。这是脚本试图执行的操作:
//connect to remote server
ssh [email protected]
//retrieve SQL dumps
//code to retrieve...
//exit from remote server
exit
//use rsync to get remote files of /var/www from local server (working)
有没有办法连接到远程主机并在该远程主机上运行脚本的代码?
答案1
答案2
如果是一条命令,则使用ssh user@host remotecommand
。例如:
ssh user@dbhost "mysqldump" > dumpfile
请注意,重定向在本地进行(除非您将它们放在引号内),因此dumpfile
将在本地计算机上创建。
这远程命令参数实际上已传递给 的默认 shell user
,因此您可以使用诸如a; b && c
和 if/while 语句之类的内容。但将它们放在第二个脚本文件中(在数据库服务器中)更为明智。