scp çalışmıyor ama ssh çalışıyor


56

Sunucuya scp ile bir şey göndermek istersem:

$ scp file server:
                   _____  _____  _____
$

, sonra üç satır yazdırılır ve dosya kopyalanmaz. Ancak ssh ile sunucuya sorunsuzca bağlanabiliyorum:

$ ssh server

Scp nasıl çalışır?


İşletim sistemi, ssh config dosyası vb. Gibi daha fazla bilgi verin.
qroberts 16

Ve bu üç satır ne basılıyor?
jjlin

Normal durumda, çalıştırdığınızda scp file server:("sunucu" geçerli bir ana bilgisayar adı olduğu varsayılarak), dosya hesap dizininize kopyalanır.
dan_linder

3
"Scp -v dosya sunucusu:" komutunu çalıştırdığınızda çıktısını sağlayabilir misiniz?
dan_linder

scpSunucuda, sonra cpveya mvsonra farklı bir yere çalışmayı deneyebilirsinizssh
Jesse W. Collins

Yanıtlar:


68

Bu tür davranışların olası bir nedeni , sunucudaki oturum açma işlemi sırasında herhangi bir mesajın yazdırılmasıdır. Scp, istemci ile sunucu arasında tamamen şeffaf şifreli bir tünel sağlamak için ssh'ye bağlıdır.

Sunucudaki tüm oturum açma komut dosyalarını kontrol edin ve farklı bir kullanıcı kullanmayı deneyin. Hatanın kaynağını tanımlamanın başka bir yöntemi, komuttaki -v komutunu kullanmak, işlemin ilerlemesini izlemek ve nerede başarısız olduğunu görmektir. Gerekirse, ayrıntı düzeyini artırmak için -vvv'ye kadar kullanabilirsiniz. Çeşitli scp formlarını kontrol etmek, yazıdaki InChargeOfIT tarafından listelendiği gibi öğretici olabilir.

Kaputun altındaki scp, ssh kullanarak bir tünel kurar ve sonra dosyayı o tünelin üzerine aktarır, uzaktaki dosyayı yakalamak için uzaktaki bir ssh komutuyla aktarır. Bu, aşağıdaki komutlarla mülkiyeti ve oluşturma zamanını koruyan bir dizin yapısını kopyalamak için tar ve ssh kullanımı ile gösterilmiştir:

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

göndermek için

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

geri almak için.


Gerçekten yararlı
akçaağaç

.Bashrc içinde scp tespit etmek mümkün mü? Böylece sadece kabuk bir scp olmadığında çıktıyı kontrol edebilir ve yazdırabilirsiniz.
Alexandros

Kullanıcının ayrıca ayrıcalık seviyesi 15 olması gerekir. Kullanıcı ayrıcalık seviyesi 15 değilse, ASA bir ayrıcalık sorunu olduğunu belirten bir hata mesajı olmadan kimlik doğrulamasından sonra bağlantıyı kapatır. Ayrıca, kullanıcılarınızın enablebir şifre yazıp girebilmeleri özel 15 oldukları anlamına gelmez. 15'in "ayrıcalık 15" ini görmüyorsanız, show run | inc USERNAMEo zaman scp yapamazsınız.
Tyler Abair

Temelde uzak sunucudaki .bashrc "zsh" kaldırıldı ve scp çalışmaya başladı!
Geek

Ayrıca SHELL değişkenini (örn. export SHELL=/bin/zsh) Değiştirirseniz kırılır ~/.bashrc. Bu bazen yokluğunda kullanılıyor chsh.
Suuuehgi

57

Hedef kullanıcının .bashrc veya eşdeğer dosyasını kontrol edin. ~ / .bashrc etkileşimli olmayan girişler için kaynaklanmıştır. Bir şey çıkaran bir yankı veya komut varsa, SCP protokolünü bozacaktır.


10
EUREKA! Bu benim sorunumdu çünkü bir servetim vardı | uzaktan kumandamdaki her oturumda cowsay. .bashrc. Şimdi mükemmel çalışıyor.
Thomas Browne

3
Siz bayım, bir cankurtaransınız. :)
Gaurav Manchanda

4
Eğer hala istiyorsan fortune | cowsay, sadece .bash_profile yaz. Bu sadece etkileşimli girişler içindir ve SCP oturumu sırasında kaynaklanmamalıdır.
spoulson

Benim sorunum, .bashrcdiğer makinede bulunmayacak olan başka bir dosyayı almaktı . İnteraktif olmadığı zaman atlamak için mantığı bu cevapta kullanabilirsiniz . ~/.bashrcscp
WISBucky

15

Düzenleme: scp komutunda geçerli bir yola girdiğinizden emin misiniz? Örneğin:

scp test.txt username@remoteserver.com

başarısız olur (aslında, gördüğünüz gibi sadece komutu basar). Bu durumda, uzak sunucuya geçerli bir yol belirtmeniz gerekecektir.scp test.txt username@remoteserver.com:~/

Örnek kullanımlar:

Bir dosya gönder:

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

Bir dosya al:

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

Örnekler:

Masaüstümden bir uzak sunucudaki ana klasörüme bir dosya gönderin:

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

Unutmayın, ~giriş dizininizin kısayoludur ... örneğin, / home /

Webrootuna bir dosya gönderin:

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

Bu örnekte, john_doe kullanıcısının remote / var / www dizininde yazma yetkilerine ihtiyacı olacaktır.


2
soruyu cevaplamıyorsun. OP tarafından verilen komut satırı oldukça iyi görünüyor, ilginç kısım ise ------... örneklerinizden hiçbiri bununla ilgili değil.
akira

@akira belki, belki de değil. Geçerli yollar bulunmaması, scp komutunun başarısız olmasına neden olur .. örneğin, scp somefile user@host.com:Uzak dizinde doğru izinlere sahip olmamak da sorunlara neden olur. Cevabımı biraz daha net hale getirmek için
InChargeOfIT

1
örneklerinizden hiçbiri "dosya mevcut değil", örneklerinizden hiçbiri "sunucu tarafında yanlış izinler" kapsamına girmiyor ...
akira

4

Bazı ana bilgisayarlarda, .bash_profilescp gibi etkileşimli olmayan girişler için yanlış kaynak sağlarlar. Terminale yazdırılan mesajların scpdüzgün çalışmamasına neden olabilir . Eğer mesajlarınız varsa .bash_profile, bunun nedeni bu olabilir.

Giriş mesajlarınızı, afişinizi vb. Etkileşimli girişlerde göstermeye devam etmek ve scpetkileşimli olmayan bir giriş aracılığıyla kullanabilmek için , .bash_profiledosyanızda yazdırılacak herhangi bir iletiden önce aşağıdakileri ekleyin .

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

[ -z "$PS1" ] && return

Alternatif kod:

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

Ve başka bir alternatif kod:

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

İlk alternatif kodun daha uzun sürüm olduğuna inanıyorum. Bazı ana bilgisayarlarda ilk kodun doğru çalışmadığını ancak ikincisinin çalıştığını buldum.

Etkileşimli olmayan bir scp girişi sırasında, .bash_profile dosyasının çalıştırılmasını iptal eder ve scp'nin çalışmasına izin verir, ancak ssh ile giriş yaptığınızda giriş mesajlarınızı görüntüler.

Not: Bu, .bashrcdosyanızda da .bash_profile($ PATH için) kaynak olarak kullanılırsa etkileşimli olmayan girişler sırasında yalnızca bir kısmının kaynaklandığı durumlarda kullanılabilir.


teşekkürler bir çekicilik gibi çalışıyor ........
bir

0

Bu, doğrudan soruyu yanıtlamaz, ancak 2 uzak ana bilgisayar arasında dosya aktarırken donuk bir scp ile çözüm arayan benim gibi insanlar için yararlı olabilir.

Eğer scpnedeniyle ssh gelen mesajları kilitleniyor, onları bastırılması için helpt olabilir:

scp -o "StrictHostKeyChecking no"

ve / veya

scp -B

Scp Man'dan:

-B Toplu iş modunu seçer (şifre veya şifre sormalarını engeller).

-o ssh_option Ayrı bir scp komut satırı bayrağı bulunmayan formatta seçenekleri ssh'ye geçirmek için kullanılabilir. Aşağıda listelenen seçeneklerin tam ayrıntıları ve olası değerleri için, bkz. Ssh_config (5).

Benim durumumda bu yardım gibi görünüyordu, ancak tüm sorunu çözmedi. Scp'nin uzaktan uzaktan aktarırken neden takıldığını bulamadık. Dosyanın ortasına asıldı. 9 kez çalıştı, deneme sayısı 10 yaptı. VPN bağlantımızın bir anlığına trafik sıkışıklığı yaşadığı ve sonra scp düzelmediği için askıda kalacağından şüphelendik. Gerçekten sadece sonsuza dek kilitleniyor ve bir hata mesajı bile vermiyor.

Ancak pes ettim ve sftp'ye geçtim. Uzak ana bilgisayarlar arasında doğrudan bir bağlantı kullandığından, bu oldukça hızlıdır. Etkinleştirmelisin

Host example.com
    AgentForward yes

Komut dosyasını çalıştıran makinenin ~ / .shh / config dosyasında. Tabii ki bu yalnızca uzaktaki makinelerin her ikisi de güvenilir ağınız içindeyse bir çözümdür.


0

Ben çağırıyordu exec /bin/bashiçinde .cshrc.

Bunu kaldırmak benim için sorunu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.