Mam serię plików oprogramowania pobranych do mojego podkatalogu ~/Downloadsna moim komputerze osobistym. Używam również bash, aby połączyć się zdalnie z komputerem za pomocą ssh.
Czy można przenieść ten plik sshna komputer zdalny?
Mam serię plików oprogramowania pobranych do mojego podkatalogu ~/Downloadsna moim komputerze osobistym. Używam również bash, aby połączyć się zdalnie z komputerem za pomocą ssh.
Czy można przenieść ten plik sshna 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.txtz ~/Downloadskomputera zdalnego, użyj:
scp ~/Downloads/yourfile.txt your_username@remotehost.edu:/some/remote/directory
Możesz zobaczyć więcej przykładów tutaj .
rsyncmoże również działać, teraz, gdy o tym myślę
scppowyżej na rsynci powinno działać dobrze.
rsyncdo 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 scpczy rsyncna niczym nie już sprężonym i / lub zaszyfrowany, należy pamiętać, aby włączyć opcję docisku ( -Cdo scp, -zlub --compressza 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ż scpjest 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 tarbieżący katalog na komputerze lokalnym i zapisanie tego, tardo stdoutktórego zostanie następnie przekazany potokiem do sshpolecenia, 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 basedirargument, aby tarwyodrę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, sshfsjeś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 sshfslub 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_otheri -Cdo 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 sshkluczy do zalogowania się bez hasła, jeśli masz je skonfigurowane.
Pod koniec cyklu rsyncpokaże ci, ile razy szybciej było po zrobieniu zwykłej kopii od nowa.
-Hjest 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/ --archivedo 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 sftpnajpierw 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, sshfsdział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.