Přinášíme vám krátký návod, jak zpřístupnit CVS pro vzdálený přístup.
Velká část Open Source projektů využívá jako software na správu verzí CVS.
Existují sice lepší alternativy, ale CVS je v této oblasti téměř standardem.
Nainstalovat CVS není velký problém, v době RPM či PKG to zvládne každý. O něco
složitější je situace, kdy chcete k CVS přistupovat vzdáleně. A touto tématikou
se zabývá tento článek.
Existuje více způsobů, jak přistupovat vzdáleně k CVS. Jsou to přístup přes
rsh, autentifikace přes heslo (pserver), CSSAPI a Kerberos. Rsh má smysl leda
na uzavřené síti (třeba za firewallem), kde si všichni uživatelé navzájem věří.
O něco lepším řešením je autentifikace uživatelů přes Kerberos, CVS zvládá jeho
verzi 4. S nástupem verze 5 autoři vytvořili obecné rozhraní CSSAPI. Pro mé
účely se však nejvíce hodí pserver. Je snadný na instalaci a konfiguraci a
zároveň umožňuje vytvořit si virtuální uživatele či vymyslet existujícím
uživatelům hesla platná jen pro CVS. Takže pokud útočník bude odposlouchávat
vaši relaci, s CVS heslem váš server nenabourá.
První část konfigurace pserveru musíte provést jako root. Je třeba přidat do
síťových služeb CVS. Do souboru /etc/services
vložte tuto
řádku:
service cvspserver
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/literakl/CVSROOT pserver
}
V obou případech parametr --allow-root
ukazuje na CVSROOT,
který bude takto zpřístupněn přes pserver. Pokud máte více repozitářů, můžete
jej použít vícekrát.
V tuto chvíli je třeba ještě restartovat inetd
, respektive
xinetd
. Pod RedHatem a spol. spusťte
$ /etc/init.d/inet reload
respektive
$ /etc/init.d/xinetd reload
Nastavení CVSROOT
Nyní je třeba zinicializovat CVSROOT. Přihlásíme se jako uživatel vlastnící
adresář CVSROOT, v tomto případě literakl a spustíme
$ cvs -d /home/literakl/CVSROOT init
Tím se nám vytvořil adresář /home/literakl/CVSROOT/CVSROOT
obsahující spoustu administrativních souborů. Mezi nimi nám však chybí soubor
passwd
, který je určen právě pro vzdálený přístup. Jeho obsah je
nápadně podobný systémovému souboru /etc/passwd
. Každý řádek
obsahuje jedno až tři políčka oddělené dvojtečkou. První políčko určuje
přístupové jméno pro CVS. Tímto jménem se budete logovat do CVS. Druhé políčko
určuje heslo zašifrované pomocí funkce crypt
. A konečně poslední
políčko určuje skutečného uživatele na systému. CVS bude provádět všechny změny
jeho jménem.
Rozeberme si pravidla na praktickém příkladě:
$ cat /home/literakl/CVSROOT/CVSROOT/passwd
pub::pubcvs
literakl:HTRphPBvKJtjA:literakl
oazanon:TXiF1923PHrtI:oazanon
První řádek určuje, že CVS uživatel pub
nepotřebuje žádné heslo
a je namapován jako systémový uživatel pubcvs
. Takový uživatel
většinou mívá přístup jen ke čtení. To snadno zajistíte, pokud vytvoříte
skupinu cvsusers
, do které přidáte uživatele pubcvs
,
literakl
a oazanon
a dáte této skupině právo čtení na
celý CVSROOT.
$ groupadd cvsusers
$ vi /etc/group
cvsusers:x:503:pubcvs,literakl,oazanon
a v novém shellu
$ chmod -R g+r-w /home/literakl/CVSROOT
$ chgrp -R cvsusers /home/literakl/CVSROOT
Další řádky definují dva uživatele s heslem, kteří jsou namapováni na stejné
uživatele, kteří již existují v systému. Takto jsme jim určili hesla pro CVS,
která by měla být odlišná od systémových hesel.
Jenže jak ta hesla zašifrujeme? S Perlem je to hračka
nejsem autorem)
$ vi cvspassword.pl
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";
$ chmod +x cvspassword.pl
$ ./cvspassword.pl heslo
Tímto končí konfigurace na straně serveru.
Klient
Uživatelé přistupující z cizího serveru musí nastavit CVSROOT a zalogovat se.
Je dobré uložit proměnnou CVSROOT do souboru ~/.profile
:
export
CVSROOT=:pserver:literakl@localhost/home/literakl/CVSROOT
Zalogujeme se pomocí příkazu cvs login
:
$ cvs login
Logging in to :pserver:literakl@localhost:2401/home/literakl/CVSROOT
CVS password: heslo
Od této chvíle můžeme přistupovat k CVS vzdáleně přes pserver.
Pokud CVS neovládáte, mohu doporučit článek na
Rootovi a v
Linuxových novinách.
Diskuse k tomuto článku
My pro nase projekty pouzivame prave prenos CVS pres SSH a jsme s tim naprosto spokojeni.
pri pouziti SSH si muzu vytvorit klic na serveru a na klientovi a nemusim pouzivat zadne heslo.
Proste pouzivam
#>cvs checkout
#>cvs update
#>cvs add test.c
#>cvs commit
... :) ...
ahoj, to heslo u klasickeho pserveru se take zadava jenom jednou.
mohl bys tu popsat presny postup, jak na to ssh? docela by mne to zajimalo. diky
Pristup pres SSH je vcelku jednoduchy. Staci nastavit 2 promenne prostredi a je to.
Prvni promenna je CVSROOT=:ext:server.domena:/adresar/na/serveru
A druha:
CVS_RSH=ssh
Na serveru cvs nemusi bezet, jako pri pristupu pres pserver. Dale je pak rozdil, ze se nepouziva prikaz cvs login a cvs logout, ale heslo se zadava pri kazdem prikazu. Chci-li si usetrit zadavani hesla, musim pro ssh vygenerovat klice a spravne je nahrat do konfigurace ssh.
Klice se generuji pomoci prikazu: ssh-keygen -t rsa
Tento prikaz vygeneruje dva soubory: id_rsa - privatni klic, ten je ulozen na klientovi v adresari $HOME/.ssh
a id_rsa.pub - ten patri na server. Jeho obsah se prida do souboru $HOME/.ssh/authorized_keys
Pak by vse melo chodit bez otazky na heslo. Podobne se lze pripojit i na CVS server z Windowsu, ale to uz je trochu jine tema.
Pavel
Todle vypada jeste jednoduseji nez to delam ja :)
Ja to delam podobne, ale presto trosku jinak.
Jedinny rozdil je v pouziti souboru config v ./ssh
Tady je posup jak rozchodit cvs pres ssh:
1) na cvs serveru rozjet ssh
2) na klientovi (v ~/.profile) nastavit:
export CVSROOT=cvs:/home/cvs
export CVS_RSH=ssh
3) na klientovi vytvorit ~/.ssh/config s obsahem:
Host cvs
Hostname 192.168.1.100
Port 22
Compression yes
User cdave
IdentityFile ~/.ssh/identity
4) vygenerovat klic na klientovi (klidne bez hesla): ssh-keygen
5) pridat prislusny radek z klient:~/.ssh/identity.pub do server:~/.ssh/authorized_keys
A uz by to melo svistet!