SCP không có lỗi


45

Tôi đã trải qua hành vi rất kỳ lạ của SCP trong một thời gian: bất cứ khi nào tôi cố gắng sao chép một tệp, đầu ra của SCP chứa một loạt các dấu gạch dưới và tệp không được sao chép.

$ scp test.txt 192.168.0.2:~
job@192.168.0.2's password: 
 ________________________________________

Khi tôi tạo kết nối SSH bằng Midnight Commander và sao chép các tệp thì nó hoạt động.

Một số thông tin về máy của tôi:

$ ssh -V
OpenSSH_5.8p1 Debian-1ubuntu3, OpenSSL 0.9.8o 01 Jun 2010

$ uname -a
Linux squatpc 2.6.38-10-generic #46-Ubuntu SMP Tue Jun 28 15:05:41 UTC 2011 i686 i686 i386 GNU/Linux

Và tôi đang chạy Kubfox 11.04.

Chỉnh sửa: Một số thông tin theo yêu cầu của các bình luận:

$ scp -v test.txt 192.168.0.2:~
Executing: program /usr/bin/ssh host 192.168.0.2, user (unspecified), command scp -v -t -- ~
OpenSSH_5.8p1 Debian-1ubuntu3, OpenSSL 0.9.8o 01 Jun 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.0.2 [192.168.0.2] port 22.
debug1: Connection established.
debug1: identity file /home/job/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/job/.ssh/id_rsa-cert type -1
debug1: identity file /home/job/.ssh/id_dsa type -1
debug1: identity file /home/job/.ssh/id_dsa-cert type -1
debug1: identity file /home/job/.ssh/id_ecdsa type -1
debug1: identity file /home/job/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.8p1 Debian-1ubuntu3
debug1: match: OpenSSH_5.8p1 Debian-1ubuntu3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.8p1 Debian-1ubuntu3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA 28:f3:2b:31:36:43:9b:07:d8:33:ca:43:4f:ca:6c:4c
debug1: Host '192.168.0.2' is known and matches the ECDSA host key.
debug1: Found key in /home/job/.ssh/known_hosts:20
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/job/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/job/.ssh/id_dsa
debug1: Trying private key: /home/job/.ssh/id_ecdsa
debug1: Next authentication method: password
job@192.168.0.2's password: 
debug1: Authentication succeeded (password).
Authenticated to 192.168.0.2 ([192.168.0.2]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: scp -v -t -- ~
 ________________________________________
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 2120, received 1872 bytes, in 0.3 seconds
Bytes per second: sent 7783.1, received 6872.6
debug1: Exit status 0

$ type scp
scp is hashed (/usr/bin/scp)

1
Hãy thử với -v để có được một số thông tin gỡ lỗi trong quá trình sao chép.
EightBitTony

Ngoài ra, chỉ trong trường hợp ... đầu ra của là type scpgì?
rozcietrzewiacz

@EightBitTony: xem các chỉnh sửa của tôi.
Công việc

@rozcietrzewiacz: cũng xem các chỉnh sửa của tôi :-)
Công việc

2
Nếu bạn làm ssh 192.168.0.2 echo hello, bạn có nhận được bất kỳ đầu ra nào khác hellokhông?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


77

Ok LOL, tôi chỉ cần tìm ra vấn đề là gì.

Vì tôi rất thích bò, tôi đã đặt fortune | cowsayở đầu .bashrctệp của mình để tạo đầu ra như sau khi bắt đầu bash:

 _______________________________________
< You will lose an important disk file. >
 ---------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Điều này là tốt (và đôi khi buồn cười) khi chạy bashtương tác. Tuy nhiên, bash đọc ~/.bashrckhi nó tương tác và không phải là vỏ đăng nhập hoặc khi đó là vỏ đăng nhập và quá trình cha của nó là rshdhoặcsshd . Khi bạn chạy scp, máy chủ khởi động một trình bao khởi động một scpthể hiện từ xa . Đầu ra từ .bashrcnhầm lẫn scpbởi vì nó được gửi giống như cách scpdữ liệu giao thức được gửi. Đây rõ ràng là một lỗi đã biết, xem tại đây để biết thêm chi tiết.

Cũng lưu ý rằng các dấu gạch dưới tôi đã đề cập trong câu hỏi là những người ở dòng trên cùng của bong bóng văn bản.

Vì vậy, giải pháp rất đơn giản: Tôi đặt phần sau ở trên cùng của .bashrcmáy từ xa (đích):

# If not running interactively, don't do anything
[[ $- == *i* ]] || return

Dòng này có mặt trong mặc định .bashrcnhưng đã bị bỏ qua vì nhiều chỉnh sửa (dường như bất cẩn) của tôi.


echo "don't have a cow" | cowsay
Stéphane Gimenez

Wow, sau nhiều tháng scp vừa bị phá vỡ, cuối cùng bạn đã thắp sáng câu trả lời cho tôi. Tôi sẽ không bao giờ nghĩ về điều này. Tôi vừa làm một mv ~/.bashrc ~/.bashrc.bakbài kiểm tra và chắc chắn rằng đó là vấn đề, và nó đã hoạt động sau khi tôi làm điều đó.
Jondlm

@ScottStensland Điều này cần phải đi đầu của điều khiển từ xa .bashrc. Một địa phương là không liên quan. Lưu ý rằng có một lỗi đánh máy trong nhận xét của tôi (câu trả lời là chính xác): không, nó *i*không phải *-*.
Gilles 'SO- ngừng trở nên xấu xa'

KHÔNG KHÔNG KHÔNG. rtfm. bashrc được chạy cho các shell không tương tác. Nếu bạn muốn tin nhắn vui vẻ khi bạn đăng nhập, hãy thay đổi bash_profile của bạn. Nếu bạn muốn có trí tuệ bò mỗi khi bạn mở X-Window thì hãy cố gắng tìm hiểu xem đây có phải là một trong NHIỀU kịch bản mà bạn không nên viết thiết bị đầu cuối - unix.stackexchange.com/questions/9605/ Thẻ
symcbean

5

AFAIK, cách đúng để kích hoạt không bị cản trở scplà về điều kiện nào cho thiết bị xuất chuẩn trong ~/.bashrctập lệnh của bạn và nhiều hơn về việc đơn giản là hạn chế đầu ra màn hình cho ~/.bash_profiletập lệnh. Ít nhất đó là cách nó hoạt động cho bản phân phối của tôi (CentOS.)

Chỉnh sửa cho rõ ràng:

  1. Chỉ đặt các dòng trong tệp ~ / .bashrc của bạn theo yêu cầu của "tất cả" các kết hợp từ xa (nghĩa là cài đặt các lọ ENV nhất định là OK, nhưng văn bản có thể đọc được của con người thì không.)
  2. YMMV

tâm trí phóng khoáng? tức là làm thế nào để hạn chế đầu ra màn hình vào .bash-profile?
javadba

1
Theo screenđầu ra, ý tôi là echo "Greetings, Master"hoặc bất cứ điều gì khác hiển thị đầu ra cho cửa sổ đầu cuối. Đừng đặt nó trong ~ / .bashrc - giữ nó trong tập lệnh ~ / .bash_profile của bạn.
Mark Hudson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.