scp tidak bekerja tetapi ssh tidak


57

Jika saya ingin mengirim sesuatu melalui scp ke server:

$ scp file server:
                   _____  _____  _____
$

, lalu tiga baris dicetak dan file tidak disalin. Namun saya dapat terhubung ke server melalui ssh tanpa masalah:

$ ssh server

Bagaimana cara membuat scp bekerja?


Berikan lebih banyak informasi seperti sistem operasi, file konfigurasi ssh, dll.
qroberts

Dan apakah tiga garis ini yang dicetak?
jjlin

Dalam kasus normal, ketika Anda menjalankan scp file server:(dengan asumsi "server" adalah nama host yang valid), file tersebut disalin ke direktori akun Anda.
dan_linder

3
Bisakah Anda memberikan output ketika Anda menjalankan "scp -v file server:".
dan_linder

Anda dapat mencoba scpke lokasi lain di server, lalu cpatau mvsesudahnyassh
Jesse W. Collins

Jawaban:


68

Salah satu kemungkinan penyebab perilaku ini adalah mencetak pesan apa pun selama proses login di server. Scp bergantung pada ssh untuk menyediakan terowongan terenkripsi yang benar-benar transparan antara klien dan server.

Periksa semua skrip login di server, dan juga coba gunakan pengguna lain. Metode lain untuk mengidentifikasi sumber kesalahan adalah dengan menggunakan -v pada perintah, untuk melacak kemajuan transaksi, dan melihat di mana ia gagal. Anda bisa menggunakan hingga -vvv untuk meningkatkan verbositas, jika perlu. Memeriksa berbagai bentuk scp juga bisa bersifat instruktif, seperti yang tercantum dalam pos oleh InChargeOfIT.

scp, di bawah tenda, mengatur terowongan menggunakan ssh, dan kemudian mentransfer file di atas terowongan itu, dengan perintah ssh di ujung untuk menangkap file ketika datang. Ini diilustrasikan dengan penggunaan tar dan ssh untuk menyalin struktur direktori yang menjaga kepemilikan dan waktu pembuatan dengan perintah berikut:

  tar czf - ./* | ssh jf@otherserver.com tar xzf - -C ~/saved_tree

untuk mengirimnya, dan

ssh jf@otherserver.com "tar czf - ~/saved_tree" | tar xzvf - -C ./

untuk mendapatkannya kembali.


Ini sangat membantu
maple

Apakah mungkin mendeteksi scp di dalam .bashrc? Sehingga Anda dapat memeriksa dan hanya mencetak hasil bila shell bukan scp?
Alexandros

Pengguna juga harus memiliki level privilege 15. Jika pengguna tidak privilege level 15, ASA hanya akan menutup koneksi setelah otentikasi tanpa pesan kesalahan yang menunjukkan masalah privilege. Juga, hanya karena pengguna Anda dapat mengetik enabledan memasukkan kata sandi tidak berarti itu adalah hak pribadi 15. Jika Anda tidak melihat "hak istimewa 15" di suatu tempat di show run | inc USERNAMEmaka mereka tidak akan dapat scp.
Tyler Abair

Saya pada dasarnya menghapus "zsh" dari .bashrc saya di server jarak jauh dan scp mulai bekerja!
Geek

Itu juga rusak jika Anda mengubah variabel SHELL (misalnya export SHELL=/bin/zsh) di ~/.bashrc. Ini kadang-kadang digunakan tanpa adanya chsh.
Suuuehgi

58

Periksa .bashrc pengguna atau file yang setara. ~ / .bashrc bersumber untuk info masuk non-interaktif. Jika ada gema atau perintah yang menghasilkan apa pun, itu akan merusak protokol SCP.


10
EUREKA! Ini masalah saya karena saya punya banyak uang | cowsay pada setiap login di .bashrc remote saya. Sekarang bekerja dengan sempurna.
Thomas Browne

3
Anda Tuan, adalah penyelamat. :)
Gaurav Manchanda

4
Jika Anda masih menginginkannya fortune | cowsay, masukkan saja .bash_profile. Itu hanya untuk login interaktif dan tidak boleh bersumber selama sesi SCP.
spoulson

Masalah saya adalah saya sedang mencari file lain di komputer saya .bashrc, yang tidak akan ada di komputer lain. Anda dapat menggunakan logika dalam jawaban ini untuk melompati ~/.bashrcketika non-interaktif (yang merupakan kasus untuk scp).
wisbucky

15

Sunting: Apakah Anda yakin Anda memasukkan jalur yang valid dalam perintah scp? Sebagai contoh:

scp test.txt username@remoteserver.com

akan gagal (pada kenyataannya, itu hanya akan mencetak perintah seperti yang Anda lihat). Dalam hal ini, Anda harus memberikan jalur yang valid ke server jarak jauh .. misalnya,scp test.txt username@remoteserver.com:~/

Contoh penggunaan:

Kirim file:

scp /path/to/local/file yourremoteusername@servername.com:/path/to/remote/directory

Dapatkan file:

scp yourremoteusername@servername.com:/path/to/remote/file /path/to/local/directory

Contoh:

Kirim file dari Desktop saya ke folder rumah saya di server jarak jauh:

scp ~/Desktop/myfile.txt john_doe@10.1.1.10:~/

Ingat ~ini adalah jalan pintas untuk direktori home Anda ... misalnya, / home /

Kirim file ke webroot:

scp ~/Documents/working/index.html john_doe@johndoe.com:/var/www/index.html

Dalam contoh ini, pengguna john_doe perlu menulis hak istimewa di direktori remote / var / www.


2
Anda tidak menjawab pertanyaan itu. baris perintah yang diberikan oleh OP terlihat cukup baik, bagian yang menarik adalah ------... tidak ada contoh Anda yang berhubungan dengan itu.
akira

@ Akira mungkin, mungkin tidak. Tidak memberikan jalur yang valid akan menyebabkan perintah scp gagal .. misalnya, scp somefile user@host.com:Juga, tidak memiliki izin yang benar pada direktori jarak jauh juga akan menyebabkan masalah.
Mengedit

1
tidak ada satu pun contoh Anda yang mencakup "file tidak ada", tidak ada satu pun contoh Anda yang mencakup "izin salah pada sisi server" ...
akira

4

Pada beberapa host mereka salah sumber .bash_profileuntuk login non-interaktif seperti scp. Pesan yang dicetak ke terminal mungkin dapat menyebabkan scptidak berfungsi dengan benar. Jika Anda memiliki pesan di dalamnya, .bash_profileini bisa menjadi penyebabnya.

Agar pesan login, spanduk, dll. Anda tetap ditampilkan pada login interaktif dan masih dapat digunakan scpmelalui login non-interaktif, tambahkan berikut ini sebelum pesan apa pun yang akan dicetak dalam .bash_profilefile Anda .

# ********** If not running interactively, don't do anything more! ***********

[ -z "$PS1" ] && return

Kode alternatif adalah:

[[ $- == *i* ]] || return

Dan kode alternatif lain:

case $- in
    *i*) ;;
      *) return;;
esac

Yang saya percaya adalah versi yang lebih panjang dari kode alternatif pertama. Saya telah menemukan pada beberapa host kode pertama tidak berfungsi dengan benar tetapi yang kedua tidak.

Selama login scp non-interaktif akan membatalkan eksekusi .bash_profile lebih lanjut dan memungkinkan scp untuk bekerja, tetapi akan menampilkan pesan login Anda ketika Anda login melalui ssh.

Catatan: Ini juga dapat digunakan dalam .bashrcfile Anda jika Anda sumbernya dari .bash_profile(untuk $ PATH) sehingga hanya sebagian yang bersumber selama login non-interaktif.


berkat bekerja seperti pesona ........
somethingSomething

0

Ini tidak menjawab pertanyaan secara langsung, tetapi mungkin bermanfaat bagi orang-orang seperti saya, mencari solusi dengan scp pembekuan saat mentransfer file antara 2 host jarak jauh.

Jika scphang karena pesan dari ssh, itu bisa membantu untuk menekannya:

scp -o "StrictHostKeyChecking no"

dan / atau

scp -B

Dari pria scp:

-B Memilih mode batch (mencegah meminta kata sandi atau frasa sandi).

-o ssh_option Dapat digunakan untuk meneruskan opsi ke ssh dalam format yang digunakan karena tidak ada flag baris perintah scp terpisah. Untuk detail lengkap dari opsi yang tercantum di bawah ini, dan nilainya yang mungkin, lihat ssh_config (5).

Dalam kasus saya itu tampaknya membantu, tetapi tidak menyelesaikan seluruh masalah. Kami tidak dapat menemukan mengapa scp hang saat mentransfer dari jarak jauh ke jarak jauh. Itu tergantung di tengah file. 9 kali berhasil, percobaan nomor 10 tidak berhasil. Kami menduga itu bisa jadi hang ketika koneksi VPN kami mendapatkan lonjakan lalu lintas sejenak dan kemudian scp tidak pulih. Benar-benar hanya hang selamanya dan bahkan tidak memberikan pesan kesalahan.

Namun, saya menyerah dan beralih ke sftp. Ini lebih cepat, karena menggunakan koneksi langsung antara host jarak jauh. Anda harus mengaktifkan

Host example.com
    AgentForward yes

dalam file ~ / .shh / config dari mesin yang menjalankan skrip. Tentu saja ini hanya solusi jika mesin jarak jauh keduanya berada dalam jaringan tepercaya Anda.


0

Aku menelepon exec /bin/bashdi .cshrc.

Menghapus ini memecahkan masalah bagi saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.