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?

binarny homar
źródło

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.

Lemnisca
źródło
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
JeeBee
źródło
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 .
Rozpoznać
źródło
19

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

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

Gareth
źródło
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