Estoy intentando hacer una copia de seguridad del servidor1 al servidor2 usando el siguiente comando en ssh
[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
Recibí el error como se muestra a continuación.
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
¿Alguien puede resolver este problema?
Actualización
Eliminé 'usuario2@servidor2' y 'deploy -i' del comando de copia de seguridad y lo ejecuté. Me da debajo mensajes
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
Respuesta1
Si el shell de inicio de sesión del usuario remoto ( user2
on server2
) es bash
, tenga en cuenta que bash
lee e interpreta ~/.bashrc
(y posiblemente /etc/bash.bashrc
o su equivalente en el sistema remoto) cuando se le llama ssh
, incluso cuando no es interactivo (como cuando simplemente interpreta lo /bin/cat > user2@server2:/......./test.sql.gz
que usted le da) .
Asegúrese de que las cosas en ~/.bashrc
no hagan cosas como stty
o mesg
(el mesg
desysvinit-utils
como se encuentra en muchas distribuciones de Linux, genera exactamente el mismo mensaje que puede ver al ejecutar : | mesg n
), o solo lo hace después de haber verificado que stdin es una terminal [ -t 0 ]
y que el shell es interactivo ( case $- in (*i*) ...;; esac
).
Si el shell de inicio de sesión del usuario remoto es csh
o tcsh
, observe los .cshrc
and .tcshrc
y for zsh
que ~/.zshenv
son interpretados por todos los shells, incluidos los no interactivos, independientemente de si se les llama ssh
o no (pero como tales, normalmente no harán cosas con el tty
incondicionalmente).
Tenga en cuenta que eso no hará que su comando falle, solo se mostrará ese mensaje falso.
Sin embargo, lo que haría que el comando fallara es:
/bin/cat > user2@server2:/......./test.sql.gz
When no tiene mucho sentido a menos que haya un directorio llamado user2@server2:
en el directorio de inicio de user2
on server2
.
Probablemente eso sea lo que causa el error:
: No such file or directory
El hecho de que el "archivo o directorio" del que se queja parezca estar "vacío" sugiere que hay un carácter de retorno de carro oculto en algún lugar de la línea de comando.
Lo que quieres es /bin/cat > /path/to/output/file/on/server2/test.sql.gz
y el /path/to/output/file/on/server2
directorio debe existir de antemano.
Es posible que también desee eliminar -v
y ~/.bashrc
temporalmente, ya que en este momento estamos viendo mensajes de ssh
, de comandos ejecutados en su ~/.bashrc
, posiblemente por el shell remoto cuando interpreta esa cat ...
línea de comando, por cat
y por el mysqldump
comando que dificulta ver qué es qué.