Jeśli chcę wysłać coś przez scp na serwer:
$ scp file server:
_____ _____ _____
$
, następnie drukowane są trzy linie i plik nie jest kopiowany. Jednak mogę połączyć się z serwerem przez ssh bez problemu:
$ ssh server
Jak sprawić, by scp działał?
scp file server:
(zakładając, że „serwer” jest prawidłową nazwą hosta), plik jest kopiowany do katalogu konta.scp
wybrać inną lokalizację na serwerze, a następnie acp
lubmv
późniejssh
Odpowiedzi:
Jedną z możliwych przyczyn tego rodzaju zachowania jest wydrukowanie dowolnej wiadomości podczas procesu logowania na serwerze. Scp zależy od ssh, aby zapewnić całkowicie przezroczysty zaszyfrowany tunel między klientem a serwerem.
Sprawdź wszystkie skrypty logowania na serwerze, a także spróbuj użyć innego użytkownika. Inną metodą identyfikacji źródła błędu jest użycie w komendzie opcji -v, aby śledzić postęp transakcji i zobaczyć, gdzie się ona nie powiedzie. W razie potrzeby możesz użyć do -vvv, aby zwiększyć gadatliwość. Sprawdzanie różnych form scp może być również pouczające, jak wymieniono w poście przez InChargeOfIT.
scp, pod maską, konfiguruje tunel za pomocą ssh, a następnie przesyła plik przez ten tunel, z komendą ssh na drugim końcu, aby złapać plik w miarę jego nadawania. Ilustruje to użycie tar i ssh do skopiowania struktury katalogów z zachowaniem własności i czasów tworzenia za pomocą następujących poleceń:
wysłać to i
odzyskać.
źródło
enable
i wprowadzić hasło, nie oznacza, że jest on prywatny 15. Jeśli nie widzisz gdzieś „przywileju 15”show run | inc USERNAME
, nie będzie w stanie scp.export SHELL=/bin/zsh
) w~/.bashrc
. Czasami używa się tego pod nieobecnośćchsh
.Sprawdź .bashrc lub równoważny plik docelowego użytkownika. ~ / .bashrc jest pozyskiwany dla nieinteraktywnych loginów. Jeśli pojawi się echo lub polecenie, które coś wyprowadza, zepsuje protokół SCP.
źródło
fortune | cowsay
, po prostu włóż go do .bash_profile. Dotyczy to tylko interaktywnych loginów i nie powinno być pozyskiwane podczas sesji SCP..bashrc
, który nie istniałby na innym komputerze. Możesz użyć logiki w tej odpowiedzi, aby pominąć,~/.bashrc
gdy nie jest interaktywny (tak jest w przypadkuscp
).Edycja: Czy masz pewność, że wpisujesz prawidłową ścieżkę w poleceniu scp? Na przykład:
zawiedzie (w rzeczywistości wydrukuje polecenie tak, jak widzisz). W takim przypadku musisz podać prawidłową ścieżkę do zdalnego serwera .. np.
scp test.txt [email protected]:~/
Przykładowe zastosowania:
Wyślij plik:
Uzyskaj plik:
Przykłady:
Wyślij plik z mojego pulpitu do mojego folderu domowego na zdalnym serwerze:
Pamiętaj, że
~
jest to skrót do twojego katalogu domowego ... np. / Home /Wyślij plik do katalogu głównego:
W tym przykładzie użytkownik john_doe potrzebuje uprawnień do zapisu w zdalnym katalogu / var / www.
źródło
------
... żaden z twoich przykładów się z tym nie wiąże.scp somefile [email protected]:
Brak odpowiednich uprawnień do zdalnego katalogu również spowoduje problemy. Zredagowałem moją odpowiedź, aby była trochę jaśniejszaNa niektórych hostach niepoprawnie
.bash_profile
pobierają nielogiczne loginy, takie jak scp. Komunikaty drukowane na terminalu mogą spowodowaćscp
nieprawidłowe działanie. Jeśli masz w sobie wiadomości,.bash_profile
może to być przyczyną.Aby nadal wyświetlać komunikaty logowania, banery itp. Przy logowaniu interaktywnym i nadal móc korzystać
scp
z nieinteraktywnego logowania, dodaj następujące elementy przed każdą wiadomością wydrukowaną w.bash_profile
pliku.Alternatywny kod to:
I inny alternatywny kod:
Uważam, że jest to dłuższa wersja pierwszego alternatywnego kodu. Znalazłem na niektórych hostach, że pierwszy kod nie działa poprawnie, ale drugi działa.
Podczas nieinteraktywnego logowania SCP przerwie dalsze wykonywanie .bash_profile i pozwoli scp działać, ale wyświetli twoje komunikaty logowania podczas logowania przez ssh.
Uwaga: Można tego również użyć w twoim
.bashrc
pliku, jeśli go źródło.bash_profile
(dla $ PATH), więc tylko część jest pozyskiwana podczas nieinteraktywnych logowań.źródło
To nie odpowiada bezpośrednio na pytanie, ale może być pomocne dla osób takich jak ja, szukających rozwiązania z zamrażającym scp podczas przesyłania plików między 2 hostami zdalnymi.
Jeśli
scp
zawiesza się z powodu wiadomości od ssh, może pomóc w ich zniesieniu:i / lub
W moim przypadku to wydawało się pomóc, ale nie rozwiązało całego problemu. Nie mogliśmy dowiedzieć się, dlaczego scp zawiesza się podczas przesyłania ze zdalnego do zdalnego. Zawieszony na środku pliku. 9 razy zadziałało, próba numer 10 nie. Podejrzewaliśmy, że może się zawiesić, gdy nasze połączenie VPN na chwilę zwiększy ruch, a następnie scp nie zostanie przywrócony. Naprawdę po prostu zawiesza się na zawsze i nawet nie wyświetla komunikatu o błędzie.
Jednak poddałem się i przestawiłem na sftp. Jest to znacznie szybsze, ponieważ wykorzystuje bezpośrednie połączenie między zdalnymi hostami. Musisz włączyć
w pliku ~ / .shh / config komputera, na którym działa skrypt. Oczywiście jest to rozwiązanie tylko wtedy, gdy oba zdalne komputery znajdują się w zaufanej sieci.
źródło
I dzwoni
exec /bin/bash
w.cshrc
.Usunięcie tego rozwiązało problem dla mnie.
źródło