From a variation of yea, itself from Middle Englishya, ye, from Old Englishġēa(“yes”), from Proto-Germanic*ja(“yes; thus, so”), from Proto-Indo-European*yē(“already”). Cognate with West Frisianja, Dutchja, Germanja, Danishja, Norwegian Bokmålja, Norwegian Nynorskja and Swedishja, Icelandicjá. Interestingly, although perhaps merely coincidentally, modern "yeah" seems to possess nearly the same pronunciation as its Old English ancestor (Old English "ġēa" being /jæːɑ/, Modern English "yeah" being [jɛə̯] or [jæə̯]) and consequently has really no other words that rhyme with it in rhotic dialects. The reason behind its seeming lack of pronunciation shift is uncertain–although it is quite possible that it simply evolved from a dialectal form of yea which developed a centring diphthong–as other words that had similar pronunciations in Old English did shift in pronunciation. It is alternatively possible that, due to its constant use (and its never being accepted as a formal term), its pronunciation has remained rigidly in place.
Alternative (but less likely) etymology derives yeah from a drawling pronunciation of yes. For further etymology, see yes.