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.
McPhee, Cokas 'working on their marriage' after affair
Duggar sisters unveil Christian dating rules in new book