경기도 양평 출신. 이명은 김백선(金百先). 가난하고 문벌이 변변치 못한 집안 출신으로 학문은 많지 않았으나 기개와 용력이 비상하였다.
1894년 동학농민군이 지평(砥平)에서 일어나자 동향 사람이던 맹영재(孟英在)와 함께 포수대를 조직, 이를 토벌하였다. 맹영재는 그 공으로 지평군수가 되었다.
이듬해 을미사변이 일어나고 단발령이 내려져 항일 기운이 고조되자, 맹영재를 찾아가 함께 의병을 일으킬 것을 제안했으나 거절당하였다. 이 때 마침 제천에서 이필희(李弼熙)·이춘영(李春永)·안승우(安承禹) 등이 의병을 일으키자, 1896년 1월 휘하 포군 400여 명을 이끌고 합류함으로써 제천의병에 실질적인 전투력을 제공하였다.
이어 같은 달 28일 유인석(柳麟錫)이 제천의병의 지휘를 맡아 부대의 편제를 정할 때 선봉장에 임명되어, 충주성전투 등에서 두드러진 활약을 보였다.
3월 27일 가흥(可興)에 주둔하고 있던 일본군 수비대를 공격, 진지를 점령하던 중 본진에 요청한 원군이 오지 않아 점령에 실패하고 끝내 패퇴하게 되자, 원군을 보내지 않은 중군장 안승우에게 거세게 항의하였다. 이것이 빌미가 되어 군기를 문란하게 하였다는 죄목으로 처형되었다.
이 사건은 휘하 의병들의 사기를 떨어뜨리고 의진을 동요시켜, 제천의병의 급격한 쇠퇴를 가져오게 한 원인이 되기도 하였다. 또한, 의병 내부에서 종종 발생하던 양반 유생과 평민·천민 간의 상하 신분 갈등이 표출된 대표적인 사건으로 이해되기도 한다.
1968년 대통령표창, 1991년 건국훈장 애국장이 추서되었다.