Chcesz w sposób bezpieczny przegrać pliki lub całe katalogi z jednego komputera na inny, również pracujący pod kontrolą systemu operacyjnego Linux.
Do przegrywania plików przez sieć wygodnie jest używać polecenia scp. Pochodzi ono z pakietu ssh i w przeciwieństwie do ftp zapewnia szyfrowanie transmisji podczas przesyłania informacji. Dodatkowo może w locie kompresować dane, skracając czas przesyłu do minimum.
Pakiet ssh musi być wcześniej zainstalowany na obydwu komputerach, pomiędzy którymi chcesz przesyłać pliki, jednak w większości dystrybucji jest on instalowany już podczas instalacji systemu.
Najprostszą formą wywołania scp jest:
[user]$ scp moj_plik zdalny.pl:
Komputer zapyta nas o hasło:
user@zdalny.pl's password:
Jeśli będzie ono poprawne, skopiuje moj_plik na zdalny.pl. Zwróć uwagę na dwukropek po nazwie komputera, jest on elementem obowiązkowym. Po nim możesz podać folder docelowy, którym domyślnie jest katalog domowy użytkownika.
Aby przegrać cały katalog musisz dodać opcję -r mówiącą o tym, że kopiowanie ma się odbywać rekurencyjnie (z podkatalogami). Opcja -C wymusi dodatkowo zastosowanie kompresji.
[user]$ scp -Cr katalog zdalny.pl:
Jeśli na zdalnym komputerze mamy inny login niż na maszynie lokalnej, możemy uwzględnić to w parametrach scp. Tym razem określmy również do jakiego katalogu ma zostać skopiowany plik:
[user]$ scp moj_plik inny_login@zdalny.pl:/var/www/html/
Gdy mamy zamiar często łączyć się z hostem zdalny.pl warto zaoszczędzić sobie pisania i zdefiniować nazwę użytkownika, która będzie domyślnie używana przy łączeniu z tym serwerem. W pliku ~/.ssh/config (~/ oznacza katalog domowy) wpisujemy następujące dwie linijki:
Host zdalny.pl
User inny_login
Takich par możemy zdefiniować więcej:
Host zdalny.pl
User inny_login
Host inny.komputer.pl
User jeszcze_inny_login
Od tej chwili możemy logować się już bez wpisywania inny_login@ przed nazwą hosta. Nadal jednak musimy podawać hasło przy każdej próbie przesłania czegokolwiek poprzez sieć. Aby wyeliminować tę niedogodność zastosujemy uwierzytelniania przy pomocy pary kluczy - publicznego i prywatnego. Klucz prywatny będziemy przechowywać na swoim komputerze, natomiast publiczny umieścimy na zdalnym serwerze. Podczas łączenia, scp będzie próbowało porównać obydwa klucze i jeśli będą one do siebie pasowały, program nawiąże połączenie bez pytania o hasło.
Aby system miał co porównywać, najpierw klucze należy wygenerować:
[user]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Created directory '/home/test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
a7:86:8b:cc:cc:a0:04:5c:cd:a8:44:92:04:cb:33:74 test@lokalny
Potwierdzamy 3 razy enterem, że zgadzamy się na domyślną lokalizację oraz puste hasło. W tym momencie mamy już parę kluczy w plikach ~/.ssh/id_rsa i ~/.ssh/id_rsa.pub
Następnie przesyłamy id_rsa.pub na zdalną maszynę i tam dołączamy go do pliku ~/.ssh/authorized_keys W pliku tym przechowywane są wszystkie klucze użytkowników, którzy mogą się łączyć bez hasła na to konto.
W tym momencie powinieneś już móc kopiować pliki bez konieczności podawania hasła przy każdym połączeniu. Co więcej, będziesz mógł się również logować na zdalnej maszynie przez ssh, bez konieczności autoryzacji - będzie się ona wykonywać automatycznie.
Należy wiedzieć o tym, że ssh odmówi wykorzystania kluczy, jeśli będzie zachodziło podejrzenie, że mogły one zostać sfałszowane.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/test/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/test/.ssh/id_rsa
Dzieje się tak wtedy, gdy katalogi w których umieszczone są klucze lub same klucze mają zbyt duże prawa dostępu. Należy więc zadbać o to, by nie miały one zbyt dużych praw dla innych użytkowników.
Na lokalnym systemie:
[user]$ chmod go-rw ~/.ssh/id_rsa
Na zdalnym:
[user]$ chmod go-w ~/ ~/.ssh
[user]$ chmod go-rw ~/.ssh/authorized_keys
man scp
man ssh