Kennedy (5-9) won for just the second time in 14 starts, allowing all four of the Pittsburgh hits and walking three.
Luke Gregorson gave up an unearned run in the eighth and Huston Street worked a perfect ninth for his 24th save.
The Pirates had won their previous two games, but starter Gerrit Cole (6-6) found himself in constant trouble against the Padres while giving up 10 hits in six frames.
Both San Diego runs were driven in by Yonder Alonso, who had a sacrifice fly in the third and an RBI single in the fifth.
Beyonce flaunts bikini body, Blue Ivy in vacation pics
Benedict Cumberbatch's dramatic reading of R. Kelly lyrics is just what you need