stdin : не в tty

stdin : не в tty

Я пытаюсь сделать резервную копию с сервера 1 на сервер 2, используя следующую команду в 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 

Я получил ошибку, как показано ниже

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

может ли кто-нибудь решить эту проблему?

Обновление

Я удалил 'user2@server2' и 'deploy -i' из команды резервного копирования и запустил ее. Она выдает мне следующие сообщения

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

решение1

Если оболочкой входа удаленного пользователя ( user2on server2) является bash, будьте осторожны, что при вызове через bashсчитывает и интерпретирует ~/.bashrc(и, возможно /etc/bash.bashrc, эквивалентно ему в удаленной системе) ssh, даже если он не интерактивен (например, когда он просто интерпретирует то, /bin/cat > user2@server2:/......./test.sql.gzчто вы ему даете).

Убедитесь, что в вещах ~/.bashrcне происходит ничего вроде sttyили mesg( mesgотsysvinit-utilsкак известно, во многих дистрибутивах Linux выводится точно такое же сообщение, которое вы можете увидеть, запустив : | mesg n), или делает это только после проверки того, что stdin является терминалом [ -t 0 ]и что оболочка является интерактивной ( case $- in (*i*) ...;; esac).

Если оболочка входа удаленного пользователя — cshили tcsh, обратите внимание на .cshrcи .tcshrcи для zsh, ~/.zshenvкоторые интерпретируются каждой оболочкой, включая неинтерактивные, независимо от того, вызваны они sshили нет (но как таковые они, как правило, не будут выполнять действия с ttyбезусловным образом).

Обратите внимание, что это не приведет к сбою вашей команды, а лишь к отображению ложного сообщения.

Однако вот что может привести к сбою команды:

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

user2@server2:When не имеет особого смысла, если в домашнем каталоге user2on не указан каталог server2.

Вероятно, именно это и является причиной ошибки:

 : No such file or directory

Тот факт, что «файл или каталог», на который жалуется программа, кажется «пустым», говорит о том, что где-то в командной строке спрятан символ возврата каретки.

То, что вам нужно, это /bin/cat > /path/to/output/file/on/server2/test.sql.gz, и /path/to/output/file/on/server2каталог должен существовать заранее.

Вы также можете временно удалить -vи ~/.bashrc, так как в данный момент мы видим сообщения от ssh, от команд, запущенных в вашем ~/.bashrc, возможно, удаленной оболочкой, когда она интерпретирует эту cat ...командную строку, catи от mysqldumpкоманды , что затрудняет понимание того, что к чему.

Связанный контент