본관은 안동(安東). 자는 중필(仲弼). 생부는 군수를 지낸 김정기(金鼎基)이며, 양부는 김학기(金學基)이다.
1829년(순조 29) 무과에 급제하여, 전라도·충청도의 병마절도사를 역임하였다. 고종 때에 들어와서는 흥선대원군의 신임을 받아 중용되었는데, 1866년 병인양요 때에는 통진부(通津府)에 진을 친 선봉장 이용희(李容熙)의 우익(右翼)으로 부평(富平)에 주둔하면서 수도방위를 담당했다.
경기중군(京畿中軍)을 거쳐, 1871년 신미양요 때 강화수로(江華水路)의 중요한 근거지인 광성진(廣城津)을 방어하다 미국군의 공격을 받아 장렬하게 전사한 진무중군(鎭撫中軍) 어재연(魚在淵)의 후임으로 진무사(鎭撫使)가 되어 중군(中軍)을 지휘하였다. 1882년 임오군란으로 복설(復設)된 삼군부(三軍府)의 지삼군부사(知三軍府事)를 거쳐 대호군(大護軍)에 이르렀다. 1882년 강화부유수(江華府留守)를 역임하기도 했다.