我想要一个命令:
- ssh作为用户foo进入我的服务器,使用我设置的公共密钥
- 使用/etc/mysql/debian.cnf执行某些数据库的mysqldump defaults-file
- to stdout,所以我可以在本地管道
- 在远程执行服务器上执行sudo时,因为不允许用户foo读取/etc/mysql/debian.cnf。允许foo 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.
,我真的不喜欢Echo。必须有更好的方法?
ssh -i keys/id_rsa foo@example.com sudo bash -c "'mysqldump --defaults-file=/etc/mysql/debian.cnf dbname'"
这只有在sudo不需要询问密码的情况下才能起作用。如果确实如此,则需要-t
选项到SSH。
请注意双引号和单引号。外部引号将被您的本地外壳带走,整个'mysqldump --defaults-file=/etc/mysql/debian.cnf dbname'
字符串将作为一个参数传递给SSH。SSH将将其传递给远程Sudo,因此您的遥控器将看到单个引号。遥控器需要单个引号来解释-c之后的零件为单个参数。