Git pres ssh na Windows
V tomto postu popíši rozjetí toho co píši v nadpisu a zároveň uvítám čtenáře v novém roce 2010. Omlouvám se za to sproste slovo v nadpisu, začinajicí na W, ale okolnosti si to žádají. Zjistil jsem, že nejeden vyvojař u kterého dokonce hrozí, že dosáhne vysokoškolského vzdělání, které jej bude identifikovat jako IT specialistu, není sto rozjet git přes ssh na Windows (myslím tím tu klientskou část). Proto jsem se jal tuto exotiku vyzkoušet na vlastní kůži.
“Vo co tady jako de?!”
Git - decentralizovaný systém pro správu verzí. Jiné jsou například Mercurial, Bazaar, či Subversion (!svn je centralizované! uvádím ho jen pro jeho rozšířenost) SSH - Secured SHell. Slouží pro vykonávání příkazů na počítačí přes zabezpečené spojení
Git obstarává práci s repozitáři a to přes zabezpečené spojení v případě, že použijeme například SSH. Na fungování takového spojení ho nejdřive musíme vytvořit. V tomto postu budu používat sadu prográmků z toolsetu PuTTY.
V tomto postu budu také přepokládat, že git je na serveru zpřístupněn přes gitosis a to pod uživatelem git. Nastavení, či instalaci gitosis jako takového tento post nepokrývá.
SSH Klíč
Co budeme potřebovat úplně nejdříve je SSH klíč, kterým nás server na kterém je kýžený repositář bude identifikovat. Použiji k tomu PuTTYgen ve verzi release 0.60. Jenom upozorním, že popisky políček a tlačítek se nejspiše mení s jazykovou mutací PuTTYgenu, kterou používáte, ale mělo by se jednat o překlad slov která zde uvádím.
Pokud úplně dole v Parameters -> Type of key to generate není zvolen typ SSH-2 RSA, tak ho zvolte. Pokud zvolen je, zvolte ho ještě víc;) Zvolit tento typ klíče je celkem důležité.
Kliknutím na tlačítko Generate se počne generovat klíč.
Text v políčku Key comment vás bude identifikovat na serveru, takže vyplňte něco co se dobře čte a je pokud možno jedinečné. Já v příkladu zvolil mailo@theWMachine
Key passphrase: Toto políčko je vlastně takové vaše heslo vygenerovaného klíče. Bude potřeba zadat pokaždé, když budete chtít klíč použít. Upozorňuji, že to není důvod k tomu toto políčko nevyplňovat, ale právě naopak. Já v příkladu zvolil passphrase heslo.
Ukládáme klíče
Toolset PuTTY používá z mě naprosto neznámého důvodu několik druhů klíčů. Z tohoto důvodu uložte co můžete. Tzn tlačitko Save public key, Save private key, Conversions -> Export OpenSSH key, Conversions-> Export ssh.com key.
Všechny klíče ukládejte do <domovský adresář>.ssh. Domovský adresář je při standartní konfiguraci na systémech W.. XP v adresáři \Documents and Settings\<jméno uživatele>. Na systémech W… Vista \Users\<jméno uživatele>. Jako jméno uživatele beru uživatele systému W.. pod kterým budete klíče používat.
Tlačítkem Conversions -> Export OpenSSH key uložte klíč pod názvem id_rsa
Tlačítkem Save public key uložte klíč pod názvem public
Tlačítkem Save public key (ano podruhé to samé tlačitko) uložte klíč pod názvem id_rsa.pub
Tlačítkem Save private key uložte klíč pod názvem private.ppk
Zbytek ukládání dle libosti;)
Teď příchází krok, který nejde tak úplně udělat přímo v PuTTY Key Generatoru. Asi je vám divné proč jsme dvakrát klikali na to samé tlačitko a napodruhé volili jiný název souboru. Bylo to jenom proto, abychom nemuseli ručně soubor s tímto názvem vytvářet. Otevřete tedy nyní soubor s názvem id_rsa.pub v nějakém textovém editoru (ne, MS Word není textový editor) přinejhořším v notepadu, který by měl být na každé verzi W… Obsah tohoto souboru nahraďte obsahem z políčka Public key for pasting into OpenSSH authorized_keys file. Soubor uložte (velice důležité) a editor zavřete (volitelné).
Jak se můj klíč dostane na server s repozitářem?
Nyní je potřeba předat klíč administrátorovi repozitářů se kterými chcete pracovat. Administrátor potřebuje ssh public key. Jiný mu nedávejte i kdyby vám vyhrožoval. Jedná se o klíč v souboru id_rsa.pub. Tento klíč můžete bezstarostně šířit mezi svými znamými. To co vás od nich odlišuje je, že máte privátní klíč. Řekl bych, že každý administrátor uvítá, když mu pošlete celý soubor a ne jenom jeho obsah.
Otestování spojení
Až se k vám dostane zpráva, že to již můžete zkusit, tak přichází na řadu další nástroj z toolsetu PuTTY a to nástroj Pageant.
Pageant je hodná tray icona s kloboukem, která se nám postará o práci s naším pracně vygenerovaným klíčem. Spusťte nástroj Pageant a k trayikonám (ty srandovní obrázky u hodin vpravo dole) vám přibude obrázek počítače s kloboukem. Klikněte na něj pravým tlačitkem a v nabídce klikněte na Add key. Nyní zvolte námi vygenerovaný klíč pro PuTTY. Je to ten s příponou ppk. Budete dotázaní na heslo. To zadejte a kliknete na tlačitko Ok. Nyní znovu klikněte pravým tlačitkem na počítač s kloboukem, ale nyní v nabídce klikneme na New Session. Jediné co je zde potřeba vyplnit je políčko Host Name (or IP address). Zadejte adresu serveru na kterém jsou tolik chtěné repositáře. Ve spodní části okna vyberte Close window on exit: Never. Klikněte na Open ve spodní části okna nástroje PuTTY. Otevře se okno s černým obsahem a po chvili budete vyzváni k zadání uživatelského jména. Zadejte git a stiskněte Enter. Pokud nebudete dotázáni na heslo, tak je vše tak jak to chceme. Systém na který se připojujete může vrátatit chybu podobnou následující
login as: git
Authenticating with public key "mailo@theWMachine" from agent
Server refused to allocate pty
ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.
To je v naprostém pořádku a nemusíte se tím znepokojovat. Jediné co nás v tuto chvili může vyvést z míry je, když se nás systém zeptá na heslo.
Konečně Git
Nyní již konečně můžeme pracovat s Gitem. Ja jsem se v gitosis pridal k projektu test, takže ho teď zkusím naklonovat (něco zhruba, trochu, velice málo podobného checkoutu v Subversionu):
##CENSORED##>git clone ssh://git@##CENSORED##/test
Initialized empty Git repository in ##CENSORED##/test/.git/
The authenticity of host '##CENSORED##' can't be established.
RSA key fingerprint is ##CENSORED##.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '##CENSORED##' (RSA) to the list of known hosts.
Enter passphrase for key '##CENSORED##.ssh/id_rsa':
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 9 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (9/9), done.
Ve vašem případě by se nemělo zobrazovat ##CENSORED##, ale nějaké konkrétní adresy;)
To je k rozběhání Gitu pres SSH na W… vše. Doufám, že vám vše funguje tak jak chcete a že jste cely postup ve zdraví přežily. Pokud máte pocit, že v postu něco schází, nebo jste našli chybu, neváhejte mi to prosím sdělit v komentářích.