1

我想要一个命令:

  • ssh 以用户 foo 的身份进入我的服务器,使用我设置的公钥
  • 使用 /etc/mysql/debian.cnf 默认文件执行某个数据库的 mysqldump
  • 到标准输出,所以我可以在本地管道它
  • 在远程服务器上执行 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.,而且我真的不喜欢回声。肯定有更好的办法?

4

1 回答 1

3

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 之后的部分解释为单个参数。

于 2012-11-05T01:20:43.180 回答