Jak pobrać plik z serwera za pomocą SCP?

31

Jestem na komputerze A i chcę pobrać plik z komputera B.

A$ scp <myuserid>@hostB:<path of file in B> .

tu jest napisane:

scp: <path of file in B>: No such file or directory

Ale na komputerze B ten plik istnieje w tej ścieżce.

Co idzie nie tak?

xyz
źródło
Czy to jest dokładnie format uruchomionego polecenia? A może po nazwie „:” pojawiła się nazwa pliku?
dtyler

Odpowiedzi:

43

Nie określiłeś żadnego pliku: musisz dodać plik (ze ścieżką) po dwukropku:

A$ scp <myuserid>@hostB:/absolutepath/file .

lub

A$ scp <myuserid>@hostB:relativepath/file .

dla ścieżki względem twojego katalogu domowego.

Jeśli nie określisz innego użytkownika (tzn. Użytkownik A i B są tacy sami), nie potrzebujesz @

A$ scp hostB:/path/file .
Matteo
źródło
2
Poprawiłem formatowanie w pytaniu, ale może twoja odpowiedź jest nadal ważna. Problem może wynikać z pomylenia ścieżek bezwzględnych i względnych (do domu).
Stéphane Gimenez
@ StéphaneGimenez teraz, gdy widzę edytowaną odpowiedź, którą rozumiem. Wydawało się to dziwne pytanie :-)
Matteo,
4
$ scp username@remoteip:remote_location_file /location/where/you/save

Działa to tylko podczas kopiowania pliku. jeśli chcesz skopiować katalog użyj

$ scp -r username@remoteip:remote_location_directory /location/where/you/save

Opcja, z której możesz skorzystać na żądanie

-P port
Określa port do połączenia z hostem zdalnym. Zauważ, że ta opcja jest napisana wielką literą „P”, ponieważ -p jest już zarezerwowane dla zachowania czasów i trybów pliku w rcp.

-p
Zachowuje czasy modyfikacji, czasy dostępu i tryby z oryginalnego pliku.

-r
Rekurencyjnie kopiuj całe katalogi.

-v

Tryb pełny. Powoduje, że scp i ssh drukują komunikaty debugujące dotyczące ich postępu. Jest to pomocne w debugowaniu problemów z połączeniem, uwierzytelnianiem i konfiguracją.

Rakib
źródło
1
OP poprosił o skopiowanie pliku, a nie katalogu.
kontr-
2

użyj właściwej ścieżki scp

scp ssh://user@hostname/tmp/foo.txt .

źródło
1

Możesz podać ścieżkę do pliku względną do katalogu domowego lub bezwzględną ścieżkę do pliku. Na przykład, jeśli foo.txtznajduje się w katalogu o nazwie docspod twoim katalogiem domowym i bar.txtjest w /var/tmp, możesz to zrobić

scp [email protected]:docs/foo.txt .
scp [email protected]:/var/tmp/bar.txt .

Zauważ, że jeśli nazwa pliku zawiera znaki, które są specjalne dla zdalnej powłoki (zwykle białe znaki lub !"#$&'*;<>?[\]^`{|}~), musisz uciec je dla zdalnej powłoki oprócz ucieczki dla lokalnej powłoki. Na przykład, jeśli plik jest wywoływany foo bar.txti znajduje się w katalogu domowym:

scp [email protected]:'foo\ bar.txt' .

Jeśli masz problemy z plikami zawierającymi znaki interpunkcyjne, spróbuj użyć sftpzamiast scpich przenieść. Lub użyj jeszcze wygodniejszej metody, jeśli możesz użyć FUSE : zamontuj system plików zdalnego komputera za pomocą sshfs , a następnie użyj zwykłych poleceń manipulacji plikami.

mkdir host.example.com
sshfs [email protected]:/ host.example.com
cp host.example.com/path/to/file .
Gilles „SO- przestań być zły”
źródło
1

Możesz SCP w obie strony łatwo, jeśli masz użytkownika DMZ i hasło Jesteś na swoim komputerze lokalnym: Z DMZ na lokalny komputer z linuksem (pull). Oznacza skopiowanie tekstu abc.text do folderu2 na bieżący zalogowany PWD.

scp user@111111:folder1/folder2/abc.txt .

Poprosi o hasło

to wszystko

Teraz chcesz wysłać folder podfoldery i pliki z komputera lokalnego do DMZ:

usr @ localmachine: ~ / abc / defs> scp -r folder / usr @ 111111: vkrishna / docker /

ponownie zostanie wyświetlone pytanie o hasło

: jest folderem głównym zdalnego komputera, a vkrishna jest folderem tam i ponownie podfolderem dokera. Lokalnie folder defs ma folder o nazwie „folder”, który chcemy całkowicie przenieść.

Podobnie jak / abc / defs / folder

vimal krishna
źródło