There is an algorithm to do this (and also to test two matrices in ${\rm GL}(n,{\mathbb Z})$ for conjugacy) described in the paper:
The conjugacy problem in ${\rm GL}(n,{\mathbb Z})$ Bettina Eick, Tommy Hofmann, E. A. O'Brien, Journal of the London Mathematical Society, Volume 100, Issue 3, December 2019 Pages 731-756.
It is implemented in Magma as the function $\mathtt {GLCentraliser}$.
Later edit: In view of the comments, I should have mentioned that the algorithm returns a finite generating set of the centralizer.
It is also worth pointing out that, given a finitely generated subgroup $G$ of ${\rm GL}(n,{\mathbb Z})$, there is a surprisingly fast algorithm to decide whether $G$ is finite and, if so, to find an isomorphic image of $G$ in ${\rm GL}(n,{\mathbb F}_q)$ for some finite field $q$, which facilitates further investigation of the structure of $G$.
If $G$ is infinite, then you can decide which of the two Tits' alternatives it satisfies. There is not much more you can do if it has a free subgroup (although you can often find a free subgroup). If it is virtually solvable, then you can do further structural computations.