stdin: não está em tty

stdin: não está em tty

Estou tentando fazer backup do servidor1 para o servidor2 usando o comando abaixo em 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 

Recebi o erro abaixo

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

alguém pode resolver esse problema?

Atualização

Eu removi 'user2@server2' e 'deploy -i' do comando de backup e executei-o. Isso me dá mensagens abaixo

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

Responder1

Se o shell de login do usuário remoto ( user2on server2) for bash, tome cuidado para que bashele leia e interprete ~/.bashrc(e possivelmente /etc/bash.bashrcou o equivalente no sistema remoto) quando chamado ssh, mesmo quando não for interativo (como quando apenas interpreta o /bin/cat > user2@server2:/......./test.sql.gzque você fornece) .

Certifique-se de que as coisas ~/.bashrcnão façam coisas como sttyou mesg(o mesgdesysvinit-utilscomo encontrado em muitas distribuições Linux é conhecido por gerar exatamente a mesma mensagem que você pode ver executando : | mesg n), ou apenas fazê-lo depois de verificar se stdin é um terminal [ -t 0 ]e se o shell é interativo ( case $- in (*i*) ...;; esac).

Se o shell de login do usuário remoto for cshor tcsh, observe os .cshrce .tcshrce for zshat ~/.zshenvquais são interpretados por todos os shells, incluindo os não interativos, independentemente de serem chamados sshou não (mas, como tal, normalmente não farão coisas com o ttyincondicionalmente).

Observe que isso não fará com que seu comando falhe, apenas que uma mensagem falsa seja exibida.

O que faria com que o comando falhasse é:

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

Quando não faz muito sentido, a menos que haja um diretório chamado user2@server2:no diretório inicial de user2on server2.

Provavelmente é isso que causa o erro:

 : No such file or directory

O fato de o "arquivo ou diretório" do qual ele está reclamando parecer "vazio" sugere que há um caractere de retorno de carro oculto em algum lugar da linha de comando.

O que você quer é /bin/cat > /path/to/output/file/on/server2/test.sql.gz, e o /path/to/output/file/on/server2diretório deve existir de antemão.

Você também pode querer remover o -ve o ~/.bashrctemporariamente, pois no momento estamos vendo mensagens de ssh, de comandos executados em seu ~/.bashrc, possivelmente pelo shell remoto quando ele interpreta essa cat ...linha de comando, por cate pelo mysqldumpcomando que torna difícil veja o que é o quê.

informação relacionada