7 posts 31 tags 7 domains

Szybkie połączenia FTP w Midnight Commanderze przez hotlistę i .netrc

Zapisz serwery FTP w hotliście mc i pozwól mu logować się automatycznie dzięki ~/.netrc — bez wpisywania hasła i bez trzymania go w skrócie.

Problem

Midnight Commander potrafi się łączyć z FTP/SFTP przez wbudowany VFS, ale wpisywanie pełnego URL-a z hasłem za każdym razem jest uciążliwe i niebezpieczne — hasło ląduje w historii powłoki i panelu mc. Cel: jedno kliknięcie na klienta, bez hasła w skrócie, ale też bez pytania o nie przy każdym połączeniu.

Rozwiązanie to kombinacja dwóch mechanizmów: hotlisty mc (Ctrl+\) na skróty do hostów i pliku ~/.netrc na poświadczenia.

Łączenie z FTP w mc — podstawy

Najprostszy sposób to wpisanie w panelu (po Ctrl+O żeby pokazać linię poleceń):

bash
cd /#ftp:user@host:port/sciezka

Dla SFTP (przez SSH — preferowane, FTP przesyła hasło plaintextem):

bash
cd /#sh:user@host:/sciezka

Można podać hasło w URL-u (user:haslo@host), ale nie warto — od tego są lepsze metody.

Hotlista — Ctrl+\

Hotlista to menedżer zakładek katalogów w mc. Działa też dla VFS-ów typu FTP/SFTP.

Dodanie wpisu z bieżącej lokalizacji

  1. Połącz się raz: cd /#ftp:pawel@ftp.example.com/var/www
  2. Naciśnij Ctrl+\
  3. Wybierz "Dodaj bieżący"
  4. Nadaj etykietę, np. Klient X — FTP produkcja

Dodanie wpisu ręcznie

W oknie hotlisty wybierz "Nowy wpis" i jako ścieżkę podaj URL VFS bez hasła:

text
/#ftp:pawel@ftp.example.com/var/www

albo:

text
/#sh:pawel@server.example.com:/home/pawel

Plik hotlisty

Wszystko siedzi w zwykłym tekstowym:

bash
$cat ~/.config/mc/hotlist

Ten plik nie zawiera haseł (jeśli ich tam nie wpiszesz), więc spokojnie można go wersjonować w dotfiles albo synchronizować między maszynami.

~/.netrc — automatyczne logowanie

Standardowy uniksowy plik z poświadczeniami, czytany przez ftp, curl, wget, lftp i mc. Format:

ini
machine ftp.example.com
login pawel
password tajneHaslo

machine ftp.innyklient.pl
login admin
password inneHaslo

Uprawnienia muszą być restrykcyjne — bez tego narzędzia zignorują plik:

bash
$chmod 600 ~/.netrc

Jak to gra razem

  1. W hotliście (Ctrl+\) wybierasz wpis typu /#ftp:pawel@ftp.example.com/var/www
  2. mc widzi, że w URL-u nie ma hasła
  3. Zagląda do ~/.netrc, znajduje machine ftp.example.com
  4. Loguje się automatycznie

Efekt: hotlista bez sekretów (do gita), hasła lokalnie z chmod 600, jedno wciśnięcie Ctrl+\ zamiast wpisywania URL-a.

Bonus — zarządzanie aktywnymi połączeniami

Żeby zobaczyć i zwolnić aktywne połączenia VFS w mc:

text
F9 → Polecenia → Aktywne wirtualne systemy plików

Przydaje się, gdy serwer zawiesi sesję i mc trzyma martwe połączenie.

Co się dzieje pod spodem

mc używa swojego VFS (Virtual File System) — ftpfs dla FTP i shell (przez ssh) dla SFTP. Składnia /#ftp:... i /#sh:... to wewnętrzne ścieżki VFS, które mc parsuje przed nawiązaniem połączenia. Przy braku hasła w URL-u, biblioteka FTP-owa mc próbuje standardowych mechanizmów uwierzytelniania — w tym ~/.netrc. Hotlista to po prostu lista takich ścieżek z etykietami, więc dziedziczy całą logikę VFS-u "za darmo".