我想要一个命令:
这是我提出的最好的:
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.
,我真的不喜欢回声。必须有更好的方法吗?
答案 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之后的部分解释为单个参数。