Tech Handbook Null Yard

SSH i zdalna administracja

SSH (Secure Shell) to podstawowy protokół do bezpiecznego, zdalnego logowania i wykonywania poleceń na systemach uniksowych. Ten materiał obejmuje codzienny zestaw narzędzi: połączenia, klucze, konfigurację klienta, transfer plików, tunneling, host keys oraz diagnostykę.

Kiedy ten materiał jest przydatny: przy administracji VPS-em lub serwerem w LAN, automatyzacji połączeń, bezpiecznym kopiowaniu plików, dostępie do usług przez tunel oraz diagnozowaniu problemów z uwierzytelnianiem.

Dla kontekstu systemowego warto znać także Debiana jako desktop i serwer, FreeBSD jako serwer oraz Linux permissions i bezpieczeństwo serwera.

1. SSH

Podstawowe połączenie:

ssh user@server

Port:

ssh -p 2222 user@server

2. Klucze

ssh-keygen -t ed25519

Domyślnie:

~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

Prywatnego klucza nie udostępniaj.

3. Kopiowanie klucza

ssh-copy-id user@server

4. authorized_keys

Na serwerze:

~/.ssh/authorized_keys

Uprawnienia:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

5. ssh config

~/.ssh/config

Przykład:

Host myvps
    HostName 203.0.113.10
    User user
    IdentityFile ~/.ssh/id_ed25519

Potem:

ssh myvps

6. SCP

Plik na serwer:

scp file.txt myvps:/tmp/

Z serwera:

scp myvps:/var/log/app.log .

7. rsync

Lepszy do katalogów i aktualizacji:

rsync -avz ./site/ myvps:/var/www/site/

Usuń po stronie docelowej to, czego nie ma źródłowo:

rsync -avz --delete ./site/ myvps:/var/www/site/

Używaj --delete ostrożnie.

8. SFTP

sftp myvps

Komendy:

ls
cd
lcd
get
put
exit

9. Agent SSH

ssh-add ~/.ssh/id_ed25519
ssh-add -l

Agent przechowuje odblokowany klucz w sesji.

10. Forwarding lokalny

ssh -L 5433:127.0.0.1:5432 myvps

Teraz lokalny port 5433 tuneluje do PostgreSQL na serwerze.

11. Remote forwarding

ssh -R 9000:127.0.0.1:3000 myvps

Pozwala wystawić lokalną usługę po stronie zdalnej.

12. SOCKS proxy

ssh -D 1080 myvps

Tworzy lokalny proxy SOCKS.

13. ProxyJump

Host internal
    HostName 10.0.0.20
    User user
    ProxyJump bastion

14. Komenda zdalna

ssh myvps 'systemctl status nginx'

15. SSHFS

Jeśli zainstalowane:

sshfs myvps:/srv/project ~/mnt/project

16. Diagnostyka

Verbose:

ssh -v myvps
ssh -vvv myvps

17. Known hosts

SSH zapamiętuje fingerprint hosta:

~/.ssh/known_hosts

Zmiana fingerprintu może być: - legalną reinstalacją serwera, - albo sygnałem ataku MITM.

Nie ignoruj komunikatu bez sprawdzenia.

18. Keepalive

Config:

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

19. Bezpieczeństwo

  • klucze zamiast haseł,
  • passphrase do klucza,
  • ograniczone uprawnienia,
  • nie kopiuj prywatnych kluczy bez potrzeby,
  • nie używaj root jako codziennego konta.

20. Co trzeba umieć

  • połączyć się kluczem,
  • skonfigurować ~/.ssh/config,
  • używać scp/rsync/sftp,
  • zrobić tunnel lokalny,
  • diagnozować przez ssh -v.

21. Dokumentacja i źródła

OpenSSH jest najlepiej dokumentowany przez własne strony podręcznika:

  • ssh(1)
    https://man.openbsd.org/ssh
  • ssh_config(5)
    https://man.openbsd.org/ssh_config
  • sshd_config(5)
    https://man.openbsd.org/sshd_config
  • ssh-keygen(1)
    https://man.openbsd.org/ssh-keygen
  • ssh-agent(1)
    https://man.openbsd.org/ssh-agent

Klucz prywatny należy traktować jak sekret. Klucz publiczny może zostać umieszczony w ~/.ssh/authorized_keys na hoście docelowym.