stdin: não está em tty

1

Eu estou tentando fazer backup de server1 para server2 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 como 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
    
por Ghost Answer 02.10.2013 / 09:56

1 resposta

3

Se o shell de login do usuário remoto ( user2 on server2 ) for bash , lembre-se de que bash lê e interpreta ~/.bashrc (e possivelmente /etc/bash.bashrc ou o equivalente no sistema remoto) quando chamado de ssh , mesmo quando não interativo (como quando ele apenas interpreta /bin/cat > user2@server2:/......./test.sql.gz que você fornece).

Certifique-se de que as coisas em ~/.bashrc não façam coisas como stty ou mesg (o mesg de sysvinit-utils como encontrado em muitas distribuições do Linux é conhecido por produzir exatamente a mesma mensagem que você pode ver executando : | mesg n ), ou somente depois de ter verificado que stdin é um terminal [ -t 0 ] e que o o shell é interativo ( case $- in (*i*) ...;; esac ).

Se o shell de login do usuário remoto for csh ou tcsh , observe os .cshrc e .tcshrc e zsh at ~/.zshenv , que são interpretados por cada shell, incluindo os não interativos independentemente de serem chamados de ssh ou não (mas, como tal, eles normalmente não farão coisas com tty incondicionalmente).

Observe que isso não fará com que seu comando falhe, apenas que a falsa mensagem 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 exista um diretório chamado user2@server2: no diretório inicial de user2 on server2 .

Isso é provavelmente o que causa o erro:

 : No such file or directory

O fato de que o "arquivo ou diretório" está reclamando parece estar "vazio" sugere que há um caractere de retorno de carro escondido em algum lugar na linha de comando.

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

Você também pode querer remover o -v e o ~/.bashrc temporariamente, já que estamos vendo mensagens de ssh , dos comandos executados no seu ~/.bashrc , possivelmente pelo shell remoto quando interpreta essa linha de comando cat ... , por cat e pelo comando mysqldump , o que dificulta ver o que é o quê.

    
por 02.10.2013 / 10:27