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/sshssh_config(5)
https://man.openbsd.org/ssh_configsshd_config(5)
https://man.openbsd.org/sshd_configssh-keygen(1)
https://man.openbsd.org/ssh-keygenssh-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.