Przejdź do głównej zawartości

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=password pomija też metodę keyboard-interactive – jeśli serwer używa tylko keyboard-interactive (częste np. przy PAM), użyj PreferredAuthentications=keyboard-interactive,password.
  • To zadziała tylko, jeśli serwer w ogóle dopuszcza hasła (PasswordAuthentication yes w /etc/ssh/sshd_config na 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.