Net :: SCP :: Ошибка (SCP не завершил успешно ()): - PullRequest
12 голосов
/ 17 декабря 2010

У меня есть скрипт, который выполняет передачу файлов с одного сервера на другой, но он выдает ошибку:

Net::SCP::Error (SCP did not finish successfully ()):

Может ли какой-нибудь орган помочь мне?Вот мой код.

Net::SCP.start( 's.com', 'username', :password => 'password' ) do|scp|
  scp.upload!( source, destination )
end

Ответы [ 8 ]

10 голосов
/ 28 апреля 2011

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

9 голосов
/ 18 июля 2011

Эта ошибка также возникает, если вы загружаете файл в папку, которая еще не существует на удаленном сервере.Создание папки не подразумевается в SCP

7 голосов
/ 13 июня 2013

У меня была немного другая ошибка, которая включала код выхода в паренах:

Net::SCP::Error Exception: SCP did not finish successfully (1)

Сначала я подумал, что это может быть вызвано тем, что исходный файл не существует или каталог назначения не существует, как другиеупоминалось, но оказалось, что это потому, что я передавал объект-путь для исходного файла вместо строки.

my_file = Rails.root.join('config/my_file') # my_file.class => Pathname
scp.upload!(my_file,  "/var/tmp/dev.pub")

<Net::SCP::Error: SCP did not finish successfully (1)>
"gems/net-scp-1.0.4/lib/net/scp.rb:352:in `start_command'",                                                                                                                                                                                                   "gems/net-ssh-2.6.7/lib/net/ssh/connection/channel.rb:590:in `call'",
"gems/net-ssh-2.6.7/lib/net/ssh/connection/channel.rb:590:in `do_close'",                                                                                                                                                                                     "gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:580:in `channel_close'",                                                                                                                                                                                "gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:459:in `send'",
"gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:459:in `dispatch_incoming_packets'",
"gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:216:in `preprocess'",                                                                                                                                                                                   "gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:200:in `process'",
"gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:164:in `loop'",                                                                                                                                                                                         "gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:164:in `loop_forever'",
"gems/net-ssh-2.6.7/lib/net/ssh/connection/session.rb:164:in `loop'",                                                                                                                                                                                         "gems/net-ssh-2.6.7/lib/net/ssh/connection/channel.rb:269:in `wait'",
"gems/net-scp-1.0.4/lib/net/scp.rb:279:in `upload!'",

Файл копировался в правильное удаленное местоположение, но что-то в net-sshвыходил 1 вместо 0, я не удосужился найти место, где этот вызов находится в трассировке стека

# gems/net-scp-1.0.4/lib/net/scp:352
channel.on_close { |ch| raise Net::SCP::Error, "SCP did not finish successfully (#{ch[:exit]})" if ch[:exit] != 0 }

Простое изменение объекта pathname в строке заставило все работать

my_file = Rails.root.join('config/my_file').to_s
scp.upload!(my_file,  "/var/tmp/dev.pub")
5 голосов
/ 04 сентября 2013

Для полноты картины это также может произойти, если у вас нет соответствующих прав для записи в пункт назначения.

3 голосов
/ 12 марта 2012

У меня есть эта проблема, и я только что исправил ее.Причина, по которой как локальный, так и удаленный путь, должен быть полным путем, например «/ home / root / folder», а не «~ / folder».

0 голосов
/ 10 декабря 2018

В моем случае мне нужно было установить пакет openssh-clients на стороне сервера также следующим образом (в CentOS7):

# yum install openssh-clients
0 голосов
/ 08 июня 2018

ОК, поэтому нашел другой способ сделать это.Внося изменения в файл, который вы загружаете, выдает какой-то хорошо продуманный спагетти-код.Простой способ определить, так ли это, вы можете посмотреть на общее количество загруженных битов в сравнении с тем, что он ожидал загрузить.

scp = Net::SSH.start(host, username, ssh_settings).scp
scp.upload!(local_path, remote_path) do |_ch, name, sent, total|
  percentage = format('%.2f', sent.to_f / total.to_f * 100) + '%'
  puts "#{name} #{percentage}"
end

Если вы видите процент без остановки на 100,00%, это может бытьпричина, по которой вы видите Net::SCP::Error Exception: SCP did not finish successfully (1).Однако, как уже было сказано выше, это может быть что-то совершенно не связанное с этим.

0 голосов
/ 14 ноября 2012

У меня есть rakefile.rb, который определяет задачу для загрузки файла на удаленный сервер с использованием аутентификации net / scp и обычного пароля, и я получаю исключение «Net :: SSH :: AuthenticationFailed», хотя я проверилхост, пользователь, пароль и строки файла.Я включил

LogLevel INFO

до

LogLevel DEBUG

, затем увидел следующий вывод в журнале сервера (например, /var/log/auth.log) и обнаружил, что клиент пытается использовать аутентификацию с открытым ключом длянекоторая причина!

Nov 13 22:38:26 linux sshd[12514]: debug1: Forked child 12532.
Nov 13 22:38:26 linux sshd[12532]: Set /proc/self/oom_score_adj to 0
Nov 13 22:38:26 linux sshd[12532]: debug1: rexec start in 5 out 5 newsock 5 pipe 7 sock 8
Nov 13 22:38:26 linux sshd[12532]: debug1: inetd sockets after dupping: 3, 3
Nov 13 22:38:26 linux sshd[12532]: Connection from 192.168.112.1 port 38391
Nov 13 22:38:26 linux sshd[12532]: debug1: Client protocol version 2.0; client software version Ruby/Net::SSH_2.6.1 i386-mingw32
Nov 13 22:38:26 linux sshd[12532]: debug1: no match: Ruby/Net::SSH_2.6.1 i386-mingw32
Nov 13 22:38:26 linux sshd[12532]: debug1: Enabling compatibility mode for protocol 2.0
Nov 13 22:38:26 linux sshd[12532]: debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
Nov 13 22:38:26 linux sshd[12532]: debug1: permanently_set_uid: 102/65534 [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: list_hostkey_types: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256 [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: SSH2_MSG_KEXINIT sent [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: SSH2_MSG_KEXINIT received [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: kex: client->server aes128-cbc hmac-sha1 none [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: kex: server->client aes128-cbc hmac-sha1 none [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: SSH2_MSG_KEX_DH_GEX_REQUEST received [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent [preauth]
Nov 13 22:38:26 linux sshd[12532]: debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: SSH2_MSG_NEWKEYS sent [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: expecting SSH2_MSG_NEWKEYS [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: SSH2_MSG_NEWKEYS received [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: KEX done [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: userauth-request for user root service ssh-connection method publickey [preauth]
Nov 13 22:38:27 linux sshd[12532]: debug1: attempt 0 failures 0 [preauth]

    (pause in time)

Nov 13 22:38:38 linux sshd[12532]: debug1: test whether pkalg/pkblob are acceptable [preauth]
Nov 13 22:38:38 linux sshd[12532]: debug1: PAM: initializing for "root"
Nov 13 22:38:38 linux sshd[12532]: debug1: PAM: setting PAM_RHOST to "np-complete.local"
Nov 13 22:38:38 linux sshd[12532]: debug1: PAM: setting PAM_TTY to "ssh"
Nov 13 22:38:38 linux sshd[12532]: debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
Nov 13 22:38:38 linux sshd[12532]: debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
Nov 13 22:38:38 linux sshd[12532]: debug1: temporarily_use_uid: 0/0 (e=0/0)
Nov 13 22:38:38 linux sshd[12532]: debug1: trying public key file /root/.ssh/authorized_keys
Nov 13 22:38:38 linux sshd[12532]: debug1: Could not open authorized keys '/root/.ssh/authorized_keys': No such file or directory
Nov 13 22:38:38 linux sshd[12532]: debug1: restore_uid: 0/0
Nov 13 22:38:38 linux sshd[12532]: debug1: temporarily_use_uid: 0/0 (e=0/0)
Nov 13 22:38:38 linux sshd[12532]: debug1: trying public key file /root/.ssh/authorized_keys2
Nov 13 22:38:38 linux sshd[12532]: debug1: Could not open authorized keys '/root/.ssh/authorized_keys2': No such file or directory
Nov 13 22:38:38 linux sshd[12532]: debug1: restore_uid: 0/0
Nov 13 22:38:38 linux sshd[12532]: Failed publickey for root from 192.168.112.1 port 38391 ssh2
Nov 13 22:38:38 linux sshd[12532]: Connection closed by 192.168.112.1 [preauth]
Nov 13 22:38:38 linux sshd[12532]: debug1: do_cleanup [preauth]
Nov 13 22:38:38 linux sshd[12532]: debug1: monitor_read_log: child log fd closed
Nov 13 22:38:38 linux sshd[12532]: debug1: do_cleanup
Nov 13 22:38:38 linux sshd[12532]: debug1: PAM: cleanup

Чтобы увидеть, что происходит, я изменил свой код, добавив ключ: ssh в опции для SCP, чтобы указать, что я поддерживаю только аутентификацию по паролю:

Net::SCP.upload!(:remote_server, :remote_user, local_file, remote_file, 
                {   
                    :password => "(my password)",
                    :ssh => {:auth_methods => ["password"]}
                }
            )

иэто привело к появлению следующих сообщений на сервере:

Nov 13 23:00:36 linux sshd[12514]: debug1: Forked child 13376.
Nov 13 23:00:36 linux sshd[13376]: Set /proc/self/oom_score_adj to 0
Nov 13 23:00:36 linux sshd[13376]: debug1: rexec start in 5 out 5 newsock 5 pipe 7 sock 8
Nov 13 23:00:36 linux sshd[13376]: debug1: inetd sockets after dupping: 3, 3
Nov 13 23:00:36 linux sshd[13376]: Connection from 192.168.112.1 port 38631
Nov 13 23:00:36 linux sshd[13376]: debug1: Client protocol version 2.0; client software version Ruby/Net::SSH_2.6.1 i386-mingw32
Nov 13 23:00:36 linux sshd[13376]: debug1: no match: Ruby/Net::SSH_2.6.1 i386-mingw32
Nov 13 23:00:36 linux sshd[13376]: debug1: Enabling compatibility mode for protocol 2.0
Nov 13 23:00:36 linux sshd[13376]: debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1
Nov 13 23:00:36 linux sshd[13376]: debug1: permanently_set_uid: 102/65534 [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: list_hostkey_types: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256 [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: SSH2_MSG_KEXINIT sent [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: SSH2_MSG_KEXINIT received [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: kex: client->server aes128-cbc hmac-sha1 none [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: kex: server->client aes128-cbc hmac-sha1 none [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: SSH2_MSG_KEX_DH_GEX_REQUEST received [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: SSH2_MSG_KEX_DH_GEX_GROUP sent [preauth]
Nov 13 23:00:36 linux sshd[13376]: debug1: expecting SSH2_MSG_KEX_DH_GEX_INIT [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: SSH2_MSG_KEX_DH_GEX_REPLY sent [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: SSH2_MSG_NEWKEYS sent [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: expecting SSH2_MSG_NEWKEYS [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: SSH2_MSG_NEWKEYS received [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: KEX done [preauth]
Nov 13 23:00:37 linux sshd[13376]: Connection closed by 192.168.112.1 [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: do_cleanup [preauth]
Nov 13 23:00:37 linux sshd[13376]: debug1: monitor_read_log: child log fd closed
Nov 13 23:00:37 linux sshd[13376]: debug1: do_cleanup

Очевидно, они не могли договориться о том, как сделать аутентификацию .... Надеюсь, это полезно для людей, сталкивающихся с этим.Если / когда я узнаю, почему это происходит, я обновлю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...