무과에 급제한 뒤 1867년(고종 4) 경상좌도 병마절도사, 1875년 함경도 병마절도사, 1877년 좌 · 우포도대장을 역임하였다. 이듬해 어영대장(御營大將)으로서 인천에 새로운 보(堡)를 축조하고 포대(砲臺)를 설치하였다. 1881년 통리기무아문당상(統理機務衙門堂上)에 취임하였고, 형조판서를 거쳐 1882년에 다시 어영대장이 되었다. 그러나 이 해 임오군란이 일어나 책임자에 대한 문책이 단행되었을 때 장어대장(壯禦大將)직에 있던 그도 파직되어 임자도(荏子島)에 유배되었다. 이듬해 고향으로 방축(放逐)되었다. 1884년 석방되어 친군후영사(親軍後營使)를 역임하였다.
1893년에는 한성부윤직에서 스스로 물러나기도 하였다. 당시 교조신원운동(敎祖伸寃運動)을 전개하던 동학 교도들이 상경해, 경복궁 광화문 앞에 엎드려 봉장(封章)을 받들며 고종에게 직접 호소하는 형편에까지 이르렀다. 정부에서 동학교도들의 상경을 사전에 막아내지 못하였다는 이유로 책임자를 힐책했기 때문이다.
1894년 전국 각지에서 동학농민군이 봉기하고, 호남 · 호서의 동학군들이 논산에 집결, 공주성을 공격할 기세를 보였다. 그 때 호위부장(扈衛副將)에 있다가 양호순무사(兩湖巡撫使)에 임명되어 동학군 토벌 임무를 부여받았다. 같은 해 독판내무부사로서 동협판(同協辦) 김종한(金宗漢) · 조인승(曺寅承) 등과 함께 3인위원단을 구성해 노인정(老人亭) 회담에 참여하였다.
이 때 일본공사 오토리[大鳥圭介]가 제시한 강압적이고 일방적인 내정개혁안의 세목과 실시 방안에 강경한 반대의사를 표시하였고, 주둔 중인 일본군의 철수를 요구하였다. 회담이 결렬된 뒤 일본측은 조선정부에 대해 한층 위협적인 태도로 일관하였고 내정 개혁을 자의적으로 강행해 나갔다.
이 같은 일본의 예봉을 둔화시켜 보려는 의도에서 조선정부가 교정청(校正廳)을 설치하고 총재관(總裁官)과 당상관을 발령할 때 한성부윤으로 임명되었다. 그 뒤 일본이 갑오개혁을 추진하고 군국기무처를 신설, 대원군을 상징으로 내세우면서 김홍집(金弘集)을 수반으로 하는 친일적 정부를 새로이 조직할 때 신정부의 요직에 배치되었다.
편서(編書)로는 『훈련도감중기(訓鍊都監重記)』가 있다.
시호는 정익(靖翼)이다.