Przesyłanie plików przez SSH [zamknięte]


461

SSHing do zdalnego serwera w linii poleceń i próbuję skopiować katalog na mój komputer lokalny za pomocą scppolecenia. Jednak serwer zdalny zwraca ten komunikat „użycia”:

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

Chciałbym móc przesyłać pliki w obu kierunkach. Z tego, co przeczytałem, pomyślałem, że powyższe polecenie zadziała do pobierania i scp -p [localpath] [remotepath]przesyłania?

Odpowiedzi:


734

Potrzebujesz scpczegoś gdzieś. Masz scp ./styles/, więc mówisz o bezpiecznym kopiowaniu ./styles/, ale nie gdzie go skopiować.

Ogólnie rzecz biorąc, jeśli chcesz pobrać, pójdzie:

# download: remote -> local
scp user@remote_host:remote_file local_file 

gdzie local_filemoże być katalog do umieszczenia kopiowanego pliku. Aby przesłać, jest odwrotnie:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Jeśli chcesz skopiować cały katalog, będziesz potrzebować -r. Pomyśl o tym scppodobnie cp, ale możesz określić plik zarówno z user@remote_host:fileplikami lokalnymi.

Edycja: Jak zauważono w komentarzu, jeśli nazwy użytkowników na hostach lokalnych i zdalnych są takie same, użytkownik może zostać pominięty przy określaniu pliku zdalnego.


2
Zauważ, że jeśli użytkownik jest taki sam na hoście zdalnym i lokalnym, nazwę użytkownika można pominąć: scp hello.c myserver.net:~/projects/
strager

Tak, prawda, dodam notatkę na ten temat. Uwzględniłem użytkownika, ponieważ podane przeze mnie przykłady zawsze będą działać. :)
lemnisca,

Trudno mi w tym ... czy to prawda. scp C: \ nazwa_pliku.txt server1 @ server2: home
Vincent

Dodaj pogrubione formatowanie w „donload” i „upload”.
kursus

2
„naturalnie” (mówię naturalnie, ponieważ zmarnowałem na to 15 minut), nie powinieneś być połączony ze zdalnym hostem podczas próby „pobrania” na lokalny, ponieważ jeśli wykonujesz kod ze zdalnej instancji, „lokalny” będzie być interpretowanym jako „zdalny”, jeśli rozumiesz, co mam na myśli. Więc nie uruchamiaj najpierw ssh.
PatrickT

164

W przypadku kopiowania do / z komputera stacjonarnego użyj WinSCP lub w systemie Linux, Nautilus obsługuje SCP poprzez opcję Połącz z serwerem.

scp może kopiować pliki tylko na maszynę z sshd, dlatego musisz uruchomić oprogramowanie klienckie na zdalnym komputerze z tego, na którym uruchomisz scp.

Jeśli kopiujesz w wierszu poleceń, użyj:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

lub

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile

4
Jesteś meżczyzną. Wdrożiłem bloga w mniej niż 10 sekund bez dodatkowej instalacji po stronie serwera!
PM

2
To działało idealnie. Użyłem msysgit w cmd, ponieważ ma on zarówno scp, jak i ssh.
Ibn Saeed

3
To działało idealnie. Użyłem scp * user @ host: / path / to / where
Bastin Robin

3
To powinna być najlepsza odpowiedź.
gsamaras

3
Dzięki za sugestię WinSCP. O wiele łatwiej niż ręcznie pisać wszystkie te polecenia ...
Brian Leishman,

23

Musisz podać źródło i miejsce docelowe, a jeśli chcesz skopiować katalogi, powinieneś spojrzeć na opcję -r.

Aby rekurencyjnie skopiować / home / user / cokolwiek ze zdalnego serwera do bieżącego katalogu:

scp -pr user@remoteserver:whatever .

19

Nie, nadal musisz wybrać scp [from] [to]sposób kopiowania

Różnica polega na tym, że musisz scp -p server:serverpath localpath


8
jaki jest cel -p?
Qinjie

1
Od man scp: Zachowuje czasy modyfikacji, czasy dostępu i tryby z oryginalnego pliku.
pjmil,

4
Wyjaśnienie -pjest tu uwzględnione tylko dlatego, że PO umieścił flagę w swoim pierwotnym pytaniu. Nie ma to żadnego związku z odpowiedzią
Gareth
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.