SSH
Kopiowanie plików między maszynami
Kopiowanie folderu z lokalnego komputera na zdalny serwer
scp -r ~/projekty/moj_folder user@192.168.1.100:/home/user/kopie
scp -r -P 2222 user@192.168.1.100:/home/user/kopie ~/projekty/ //niestandardowy port
scp -r -C user@192.168.1.100:/home/user/kopie ~/projekty/ //-C włącza kompresję
SSH - serwer
Instalacja
sudo apt update && sudo apt install openssh-server -y
Uruchomienie
sudo systemctl start ssh
Ustaw automatyczne uruchamianie przy starcie systemu
sudo systemctl enable ssh
Sprawdź status serwera SSH
sudo systemctl status ssh
Logowanie SSH za pomocą kluczy (certyfikatów)
Na komputerze (klient), który będzie łączyć się z drugą maszyną (serwer):
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
-t rsa – typ klucza (RSA)
-b 4096 – długość klucza (4096 bitów)
f ~/.ssh/id_rsa – ścieżka do plików klucza (prywatny: id_rsa, publiczny: id_rsa.pub)
Skopiowanie klucza publicznego na serwer
Użyj komendy ssh-copy-id, aby dodać klucz do ~/.ssh/authorized_keys na serwerze:
ssh-copy-id user@serwer
ssh-copy-id -i /ścieżka/do/klucza.pub user@host
Jeśli ssh-copy-id nie jest dostępne, możesz zrobić to ręcznie:
scp ~/.ssh/id_rsa.pub user@serwer:~/
ssh user@serwer "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
rm ~/id_rsa.pub # Usunięcie przesłanego pliku klucza (opcjonalnie)
(Opcjonalnie) Wyłączenie logowania hasłowego na serwerze
sudo nano /etc/ssh/sshd_config
Zmodyfikuj lub dodaj linie:
PasswordAuthentication no
PubkeyAuthentication yes
Następnie zrestartuj usługę SSH:
sudo systemctl restart ssh
Dodawanie istniejącego certyfikatu do drugiego hosta (klienta)
Kopiujemy na hosta id_rsa, sprawdzamy/zmieniamy uprawniania
chmod 600 ~/.ssh/id_rsa
Sprawdzamy czy agent ssh działa
eval "$(ssh-agent -s)"
Dodajemy certyfikat
ssh-add ~/.ssh/id_rsa
Sprawdzamy poprawność konfiguracji
ssh-add -l
Konfiguracja klienta SSH (opcjonalnie)
~/.ssh/config
Host myserver
HostName example.com
User myuser
IdentityFile ~/.ssh/id_rsa
CertificateFile ~/.ssh/id_rsa-cert.pub
Teraz możesz połączyć się bez podawania klucza za każdym razem:
ssh myserver
Usuwanie dodanego hosta do know_hosts
ssh-keygen -R NAZWA_LUB_IP
Wymuszanie podania hasła przy połączeniu ssh
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@host
-o PreferredAuthentications=password – ustawia preferowaną metodę uwierzytelniania na hasło.
-o PubkeyAuthentication=no – wyłącza uwierzytelnianie kluczami publicznymi.
Krótszy wariant (samo wyłączenie kluczy zwykle wystarcza):
ssh -o PubkeyAuthentication=no user@host
Aby ustawić to na stałe dla konkretnego hosta, dodaj wpis w ~/.ssh/config:
Host mojserwer
HostName 192.168.1.10
User user
PubkeyAuthentication no
PreferredAuthentications password
Potem wystarczy ssh mojserwer.
Uwagi:
PreferredAuthentications=passwordpomija też metodękeyboard-interactive– jeśli serwer używa tylkokeyboard-interactive(częste np. przy PAM), użyjPreferredAuthentications=keyboard-interactive,password.- To zadziała tylko, jeśli serwer w ogóle dopuszcza hasła (
PasswordAuthentication yesw/etc/ssh/sshd_configna serwerze). Jeśli serwer ma wyłączone hasła, klient nic nie wymusi. - Przydatne np. gdy masz w agencie wiele kluczy i dostajesz błąd
Too many authentication failures– alternatywnie można dodać-o IdentitiesOnly=yes.