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?

scdmb
sumber
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 [email protected] tar xzf - -C ~/saved_tree

untuk mengirimnya, dan

ssh [email protected] "tar czf - ~/saved_tree" | tar xzvf - -C ./

untuk mendapatkannya kembali.

faitjx
sumber
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.

spoulson
sumber
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 [email protected]

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 [email protected]:~/

Contoh penggunaan:

Kirim file:

scp /path/to/local/file [email protected]:/path/to/remote/directory

Dapatkan file:

scp [email protected]:/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 [email protected]:~/

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

Kirim file ke webroot:

scp ~/Documents/working/index.html [email protected]:/var/www/index.html

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

InChargeOfIT
sumber
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 [email protected]: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.

frederickjh
sumber
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.

anarchist912
sumber
0

Aku menelepon exec /bin/bashdi .cshrc.

Menghapus ini memecahkan masalah bagi saya.

dips
sumber