sudo使用ssh语法的mysqldump?

时间:2012-11-05 01:16:17

标签: bash ssh mysqldump sudo

我想要一个命令:

  • ssh以用户foo的身份进入我的服务器,使用我设置的公钥
  • 使用/etc/mysql/debian.cnf defaults-file执行某个数据库的mysqldump
  • 到stdout,所以我可以在本地管道
  • 在服务器上远程执行sudo时,因为不允许用户foo读取/etc/mysql/debian.cnf。 foo被允许sudo bash而不是sudo mysqldump。

这是我提出的最好的:

echo 'mysqldump --defaults-file=/etc/mysql/debian.cnf dbname' | ssh -t -i keys/id_rsa -l foo example.com sudo bash -s

这只丑陋的野兽有效,但产生:Pseudo-terminal will not be allocated because stdin is not a terminal.,我真的不喜欢回声。必须有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

ssh -i keys/id_rsa foo@example.com sudo bash -c "'mysqldump --defaults-file=/etc/mysql/debian.cnf dbname'"

这仅在sudo不需要密码时才有效。如果是,则需要-t选项ssh。

请注意双引号和单引号。外部引号将被本地shell删除,整个'mysqldump --defaults-file=/etc/mysql/debian.cnf dbname'字符串将作为单个参数传递给ssh。 Ssh会将其传递给远程sudo,因此您的遥控器将看到单引号。远程bash需要单引号将-c之后的部分解释为单个参数。