Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当ssh用于在另一台服务器上转储备份文件时,为什么会出现“tcgetattr”错误?_Mysql_Ssh_Mysqldump_Database Backups - Fatal编程技术网

Mysql 当ssh用于在另一台服务器上转储备份文件时,为什么会出现“tcgetattr”错误?

Mysql 当ssh用于在另一台服务器上转储备份文件时,为什么会出现“tcgetattr”错误?,mysql,ssh,mysqldump,database-backups,Mysql,Ssh,Mysqldump,Database Backups,我想在另一台服务器上转储一个表备份,我正在使用ssh来完成。 当我运行下面的命令时,它给出了一个错误,但转储文件被复制到目标 mysqldump -u username -ppassword dbname tablename | ssh -t -t servers_username@domain_name 'cat > /tmp/bckp.sql'; tcgetattr:参数无效 如果我按CTRL+c,则会在错误消息中附加信号2杀死的。 为什么会出现此错误?我在使用ssh-t-t或ssh

我想在另一台服务器上转储一个表备份,我正在使用ssh来完成。 当我运行下面的命令时,它给出了一个错误,但转储文件被复制到目标

mysqldump -u username -ppassword dbname tablename | ssh -t -t servers_username@domain_name 'cat > /tmp/bckp.sql';
tcgetattr:参数无效

如果我按CTRL+c,则会在错误消息中附加信号2杀死的


为什么会出现此错误?

我在使用
ssh-t-t
ssh-tt
强制进行伪终端分配时看到了此错误

tcgetattr
函数用于查找由文件描述符表示的伪终端的属性;它使用文件描述符和指向termios结构的指针来存储终端元数据。从中可以看出,此错误表示
termios
结构的空指针。我不确定这些相同的错误处理语义是否适用于特定于平台的
tcgetattr
实现

如果要抑制此错误,请按如下方式调用
ssh

ssh 2>/dev/null

这将把STDERR重定向到
/dev/null
;使用此重定向调用时,您不会看到错误。请注意,这将用ssh
ssh
掩盖其他错误;出于调试的目的,您可能需要删除它。

在我的例子中,在两级ssh调用的外部ssh上强制分配pty解决了这个问题

详情:

当您提供ssh运行的命令(例如ssh some_server“do_some_command”)时,ssh假定您不需要交互式会话,并且在提交您要求它执行的“do_some_command”作业时,它不会分配pty

然而,如果您有两层ssh(例如,假设您想先ssh到“网关”机器,然后从那里ssh到“内部”机器并运行一些“内部命令”),事情就会变得有趣

问题是,对于两层ssh作业,从外部ssh的角度来看,您请求外部ssh运行非交互命令,因此外部ssh不会分配tty

如果您在内部ssh中运行的命令是交互式的,那么它可能想要查询tty属性,并且它(理所当然地)会抱怨它没有在tty上运行

在我的例子中,解决方案是使用-t参数强制外部ssh分配pty。所以看起来是这样的:

ssh-t“ssh\”“”

向那边的系统管理员问好