본관은 선산(善山). 자는 유후(裕後). 아버지는 증 호조판서 김지(金地)이다.
처음에 교서관교감에 제수되었고, 1440년 집현전정자(集賢殿正字)가 되었다. 이어 저작랑(著作郎)을 거쳐 예문관검열로 옮겼다가 봉교(奉敎)로 승진하였다. 그 뒤 한성참군(漢城參軍)·감찰·정언(正言)·이조정랑의 요직을 거쳐 장령(掌令)에 올랐다.
거듭 상소해 환관의 봉군(封君)을 혁파했고, 이어서 검상(檢詳)을 거쳐 단종 때 지사간원사(知司諫院事)에 이르렀다. 그 뒤 집현전직제학(集賢殿直提學)이 되었을 때 세조가 세자시강원우보덕(世子侍講院右輔德)에 임명하자 노부모의 봉양을 구실로 외직을 요청해 성주목사가 되었다.
1465년(세조 11) 대사성이 되어 교육을 주관했고, 이어서 대사간으로서 간쟁(諫諍) 활동을 폈다. 특히 대사헌 양성지(梁誠之)와 함께 서얼 출신 유자광(柳子光)의 병조정랑 임명을 반대하였다. 그 뒤 첨지중추부사·강원도관찰사·충청도관찰사를 역임하고, 예종이 즉위하자 이조참의가 되었다.
그러나 예종의 미움을 받아 파직되었다가 성종이 즉위하자 예문관부제학에 발탁되었다. 그 때 불교 서적 무역의 폐단을 지적하고 이를 반대하였다. 1471년 대사헌이 되어 당시 좌의정의 탐학을 탄핵해 파직시켰다. 그리고 오백창(吳伯昌)의 봉군을 반대하고, 화공 최경(崔涇)의 승진을 반대해 서경(署經)을 거부하였다.
이듬해 전라도관찰사가 되어 감초(甘草)를 비롯한 약초 재배의 관리에 힘썼고, 세곡 운송 문제에도 각별한 대책을 강구하였다. 1474년 지중추부사로서 정조사가 되어 명나라에 다녀왔다. 이듬해 임금의 간곡한 권유로 평안도관찰사가 되어 수령의 탐학을 처벌하고, 성책을 보수하는 데 힘쓰는 등 3년 동안 많은 치적을 남겼다.
그 뒤 동지중추부사를 지내고, 1484년 개성유수가 되었다. 그러다가 이듬해 신병으로 사직했는데, 성종의 특은으로 한직으로 돌려 호군에 제수되었다. 성품이 강직하고 절개가 있어 사람들이 존경하였다. 시호는 경질(景質)이다.