Mam serię plików oprogramowania pobranych do mojego podkatalogu ~/Downloads
na moim komputerze osobistym. Używam również bash, aby połączyć się zdalnie z komputerem za pomocą ssh
.
Czy można przenieść ten plik ssh
na komputer zdalny?
Mam serię plików oprogramowania pobranych do mojego podkatalogu ~/Downloads
na moim komputerze osobistym. Używam również bash, aby połączyć się zdalnie z komputerem za pomocą ssh
.
Czy można przenieść ten plik ssh
na komputer zdalny?
Odpowiedzi:
Możesz użyć scp
do tego celu. Jest to bezpieczny sposób przesyłania plików przy użyciu protokołu SSH.
Na przykład, aby skopiować plik o nazwie yourfile.txt
z ~/Downloads
komputera zdalnego, użyj:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Możesz zobaczyć więcej przykładów tutaj .
rsync
może również działać, teraz, gdy o tym myślę
scp
powyżej na rsync
i powinno działać dobrze.
rsync
do wszystkiego, nawet pojedynczych plików, ponieważ „po prostu działa” w prostych przypadkach i może być znacznie bardziej wydajny w innych przypadkach. W przypadku korzystania albo scp
czy rsync
na niczym nie już sprężonym i / lub zaszyfrowany, należy pamiętać, aby włączyć opcję docisku ( -C
do scp
, -z
lub --compress
za rsync
). W rzeczywistości włączam to przez przyzwyczajenie - bardzo rzadko zdarza się sytuacja, w której wszystko to spowalnia (być może, jeśli używasz powolnego urządzenia małej mocy o ograniczonej mocy CPI, takiego jak rPi).
Chociaż scp
jest to z pewnością odpowiednie narzędzie do tego, jeśli z jakiegoś powodu nie możesz go użyć, możesz zrobić coś takiego z lokalnego komputera, aby skopiować, powiedzmy, strukturę katalogów na maszynę zdalną:
tar -c . | ssh <remote> tar -x
Spowoduje to tar
bieżący katalog na komputerze lokalnym i zapisanie tego, tar
do stdout
którego zostanie następnie przekazany potokiem do ssh
polecenia, w którym wykona polecenie zdalne w celu rozpakowania pliku, z którego czytastdin
Edytowane w celu odzwierciedlenia komentarza Dietrich Epp o -f -
tym, że jest domyślny zarówno na końcach tworzenia, jak i ekstrakcji, więc nie jest konieczne precyzyjne określenie.
-C basedir
argument, aby tar
wyodrębnić gdzieś indziej niż katalog domowy, jeśli to robisz.
Jeśli chcesz to zrobić częściej niż rzadko, sugeruję zamontowanie zdalnego systemu plików, sshfs
jeśli używasz systemu uniksowego obsługującego FUSE (Linux, * BSD, Mac OS X). Utwórz katalog w katalogu domowym, powiedzmy, o nazwie ~ / remote-server:
$ mkdir ~/remote-server
Następnie zamontuj zdalny system plików za pomocą sshfs
. Zamień „yourserver.com” na nazwę hosta zdalnego komputera, a „name zdalnego katalogu” na katalog używany w systemie zdalnym.
$ sudo sshfs username@yourserver.com:/name/of/remote/directory ~/remote-server/
Po wykonaniu tej czynności zdalny katalog jest częścią systemu plików i można na nim używać wszystkich zwykłych narzędzi, w tym cp
:
$ cp ~/Downloads/your-files ~/remote-server
Jeśli jeszcze tego nie zrobiłeś sshfs
, powinieneś być w stanie zainstalować go na swoim komputerze za pomocą menedżera pakietów (poszukaj pakietów o nazwach sshfs
lub fuse-sshfs
). Aby uzyskać więcej informacji, możesz przeczytać samouczek online .
To, nawiasem mówiąc, mój ulubiony sposób zarządzania plikami na zdalnych serwerach. Zwykle utrzymuję w ten sposób jeden serwer produkcyjny i dwa serwery programistyczne i używam z nimi normalnego przepływu pracy przeglądania plików.
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
i -C
do kompresji, jeśli słabe pasmo. Jak tylko zadziała dobrze, osobiście dodaję aliasy dla poleceń, aby szybko zamontować odległe systemy plików na ssh. @Benjamin_Staton Nie użyłbym tutaj sudo ani roota, przynajmniej bez odpowiedniego mapowania użytkowników / grup.
Po raz pierwszy nie ma prawdziwej różnicy między scp
(kopiowanie ssh
) a rsync
.
Przy kolejnych uruchomieniach rsync nie kopiuje plików, które już istnieją.
rsync -avH ~/Downloads username@remotehost:Downloads
-a
dla wszystkich plików-v
za pełne-H
za „po prostu znajdź dowiązania symboliczne i rób to, co należy”Inne przydatne flagi to:
--delete
aby usunąć pliki w miejscu docelowym, których już nie ma w źródle.--dry-run
do testowania - bardzo przydatny w połączeniu z --delete
.Spowoduje to również użycie ssh
kluczy do zalogowania się bez hasła, jeśli masz je skonfigurowane.
Pod koniec cyklu rsync
pokaże ci, ile razy szybciej było po zrobieniu zwykłej kopii od nowa.
-H
jest faktycznie dla twardych linków, zatrzymuje wysyłanie tej samej treści dwa lub więcej razy, gdy jest ona połączona z więcej niż jednym miejscem w źródłowej strukturze katalogów (ale może sprawić, że proces będzie mniej wydajny dla dużych struktur katalogów). nie ma to wpływu na dowiązania symboliczne, ale niektóre opcje zawarte w -a
/ --archive
do wpływają na sposób przetwarzania dowiązań symbolicznych.
Aby dodać do powyższych odpowiedzi. Czasami nie jestem pewien co do odległej ścieżki. W takich przypadkach używam sftp
najpierw do przejścia do wymaganej lokalizacji, a następnie użyj polecenia get lub put, aby faktycznie pobrać lub załadować plik.
Jeśli chcesz również zachować synchronizację, a nawet chcesz uruchomić lokalnie jakiś plik, który znajduje się na zdalnym komputerze, sshfs
działa świetnie.
Robię coś bardzo podobnego z ssh. Stworzyłem niestandardowe narzędzie do kompilacji dla Visual Studio i po prostu mam VS uruchomić polecenie ssh, które kopiuje mój kod na komputer docelowy, a następnie kompiluje go na tym komputerze docelowym.
ssh userB @ hostB 'cp /network/path/of/source/file.ext /path/of/final/file.ext; ./runCustomCommand ”
Zwróć uwagę na użycie pojedynczego cudzysłowu i średnika. Pierwszy z nich zawiera polecenia do hosta B za pośrednictwem ssh, a drugi pozwala na uruchamianie wielu poleceń systemowych hostB w jednym poleceniu ssh z hosta A.
Aby to zadziałało, musisz skonfigurować klucze ssh na swoim komputerze startowym, abyś mógł być użytkownikiem A @ hostA i zalogować się na hostB jako użytkownik B. Proces tworzenia publicznego klucza ssh dla userA @ hostA jest dobrze udokumentowany. Jeśli nie utworzysz klucza publicznego na hoście A dla użytkownika A i skopiujesz ten klucz na hoście B jako użytkownik B, będziesz zmuszony wprowadzić hasło za każdym razem - co rujnuje radość z automatyzacji.
this file
) i wielu plików (a series of software files
), najlepsze rozwiązanie zależy od tego, czy masz jeden plik czy wiele plików.