stdin: ist nicht in tty

stdin: ist nicht in tty

Ich versuche, ein Backup von Server1 auf Server2 zu erstellen, indem ich den folgenden Befehl in SSH verwende

[user1@server1 ~]$ mysqldump -u dbuser -p"dbpwd" --opt  dbname        \
                      | gzip -c                                       \
                      | ssh  -o StrictHostKeyChecking=no              \
                             -o UserKnownHostsFile=/...../known_hosts \
                             -l deploy                                \
                             -i  /...../id_rsa                        \
                             -v  user2@server2                        \
                             "/bin/cat > /.../test.sql.gz" \
                      2>&1 

Ich habe den folgenden Fehler erhalten

debug1: Sending command: /bin/cat > -t user2@server2:/..../test.sql.gz
stdin: is not a tty
/bin/cat: user20@server2:/..../test.sql.gz
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
: No such file or directory
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 265040, received 2552 bytes, in 0.0 seconds
Bytes per second: sent 6736670.0, received 64865.6
debug1: Exit status 1
mysqldump: Got errno 32 on write

kann irgendjemand dieses Problem lösen?

Aktualisierung

Ich habe 'user2@server2' und 'deploy -i' aus dem Backup-Befehl entfernt und ihn ausgeführt. Es gibt mir die folgenden Meldungen

debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: /bin/cat > -t /....../test.sql.gz
stdin: is not a tty
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
/bin/cat: /......./test.sql.gz: No such file or directory
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 248608, received 2536 bytes, in 0.1 seconds
Bytes per second: sent 4628197.5, received 47211.3
debug1: Exit status 1
mysqldump: Got errno 32 on write

Antwort1

Wenn die Login-Shell des Remote-Benutzers ( user2auf server2) ist bash, achten Sie darauf, dass beim Aufruf über bashgelesen und interpretiert wird ~/.bashrc(und möglicherweise /etc/bash.bashrcoder das Äquivalent auf dem Remote-System) ssh, auch wenn es nicht interaktiv ist (also wenn es nur das interpretiert, /bin/cat > user2@server2:/......./test.sql.gzwas Sie ihm geben).

Stellen Sie sicher, dass die Dinge in ~/.bashrcnicht tun, Dinge wie sttyoder mesg(die mesgvonsysvinit-utilswie es in vielen Linux-Distributionen zu finden ist, gibt bekanntermaßen genau dieselbe Meldung aus, wie Sie sehen können, wenn Sie ausführen : | mesg n), oder tun Sie dies nur, nachdem Sie überprüft haben, dass es sich bei stdin um ein Terminal handelt [ -t 0 ]und die Shell interaktiv ist ( case $- in (*i*) ...;; esac).

Wenn die Login-Shell des Remote-Benutzers cshoder ist tcsh, sehen Sie sich .cshrcund .tcshrcund für zshan ~/.zshenv, die von jeder Shell interpretiert werden, einschließlich nicht interaktiver Shells, unabhängig davon, ob sie aufgerufen werden sshoder nicht (aber als solche führen sie Dinge mit dem normalerweise nicht ttybedingungslos aus).

Beachten Sie, dass dies nicht dazu führt, dass Ihr Befehl fehlschlägt, sondern lediglich die fehlerhafte Meldung angezeigt wird.

Folgendes würde jedoch dazu führen, dass der Befehl fehlschlägt:

 /bin/cat > user2@server2:/......./test.sql.gz

„Wann“ ergibt nicht viel Sinn, es sei denn, es gibt ein Verzeichnis namens user2@server2:im Home-Verzeichnis von user2on server2.

Das ist wahrscheinlich die Fehlerursache:

 : No such file or directory

Die Tatsache, dass die beanstandete „Datei oder das Verzeichnis“ „leer“ zu sein scheint, lässt darauf schließen, dass irgendwo in der Befehlszeile ein Wagenrücklaufzeichen versteckt ist.

Was Sie wollen, ist /bin/cat > /path/to/output/file/on/server2/test.sql.gz, und das /path/to/output/file/on/server2Verzeichnis muss vorher vorhanden sein.

Möglicherweise möchten Sie auch -vund ~/.bashrcvorübergehend entfernen, da wir momentan Nachrichten von sehen ssh, von Befehlen, die in Ihrem ausgeführt werden , möglicherweise von der Remote-Shell, wenn diese diese Befehlszeile ~/.bashrcinterpretiert , nach und nach der Befehl, was es schwierig macht zu erkennen, was was ist.cat ...catmysqldump

verwandte Informationen