pourquoi le `tcgetattr` erreur rencontrée lors de la ssh est utilisé pour décharger le fichier de sauvegarde sur un autre serveur?
Je veux faire un dump d'un des tableaux de sauvegarde sur un autre serveur et je suis en utilisant ssh pour le faire.
quand je lance la commande ci-dessous, il donne une erreur mais le fichier de vidage est copié à destination.
mysqldump -u username -ppassword dbname tablename | ssh -t -t servers_username@domain_name 'cat > /tmp/bckp.sql';
tcgetattr: Invalid argument
Si j'appuyez sur CTRL+c puis il ajoute message d'erreur avec Killed by signal 2.
Pourquoi est-ce une erreur?
OriginalL'auteur Manoj Kumar | 2012-10-15
Vous devez vous connecter pour publier un commentaire.
J'ai vu cette erreur lors de forcer pseudo-terminal d'allocation de l'aide
ssh -t -t
oussh -tt
.La
tcgetattr
fonction est utilisée pour rechercher les attributs de la pseudoterminal représenté par un descripteur de fichier; il prend un descripteur de fichier et un pointeur vers une structure termios pour stocker le terminal de métadonnées. Il me semble de la stub code dans la glibc que cette erreur représente un pointeur null pour letermios
struct. Je ne suis pas sûr que ces même erreur sémantique de gestion sont en place pour la plate-forme des implémentations spécifiques detcgetattr
.Si vous souhaitez supprimer cette erreur, invoquer
ssh
comme suit:Ce sera rediriger STDERR à
/dev/null
; vous ne verrez pas l'erreur lors de l'appel avec cette redirection. Notez que cela va masquer d'autres erreurs avecssh
; vous devrez peut-être supprimer ce à des fins de débogage.OriginalL'auteur Paul Morie
Dans mon cas, forçant pty allocation sur l'extérieur ssh d'un deux-niveau de l'invocation de la commande ssh résolu le problème.
Détails:
Lorsque vous fournissez une commande ssh pour exécuter ( par exemple ssh some_server "do_some_command" ), puis ssh suppose que vous n'aurez pas besoin d'une session interactive, et il ne sera pas allouer un pty qu'elle soumet à la "do_some_command travail" vous avez demandé.
Cependant, les choses deviennent intéressantes si vous avez deux couches de ssh (par exemple, disons que vous voulez faire un ssh sur une machine "passerelle" d'abord, et à partir de là, vous ssh dans un "intérieur" de la machine et lancer quelques "inner_command").
La chose est, avec une à deux couches ssh avec du travail, du point de vue de l'extérieur, ssh, vous demandez à ce que l'extérieur ssh exécuter un non-interactive de commande, ainsi que l'extérieur de la ssh n'attribuera pas d'un ats.
Si la commande que vous sont en cours d'exécution à l'intérieur de l'ssh est conçu pour être interactif, il sera probablement voulez interroger ats attributs et elle (la justice) se plaignent qu'il n'est pas en cours d'exécution sur un tty.
La solution dans mon cas était de le forcer à l'extérieur ssh pour allouer un pty, en utilisant l'argument-t. Donc, ça ressemblait à ça:
ssh -t <gateway_machine> "ssh <inner_machine> \"<inner_interactive_command>\" "
Salutations aux administrateurs système, y
OriginalL'auteur Tony Clifton