My solution:
Case 1: $b \neq 0$
WTS:
(1) $\exists a \in \mathbb R, \forall \epsilon > 0, \exists N_1 > 0$, such that for all $n \in \mathbb N$,
if $n > N_1$, then $|a_n - a| < \dfrac{\epsilon}{2|b|}$
(2) $\exists b \in \mathbb R, \forall \epsilon > 0, \exists N_2 > 0$, such that for all $n \in \mathbb N$,
$$\text{Let } M := max(|a-\epsilon|, |a + \epsilon|, |a_n| \text{ for n} < N)$$
if $n>N_2$, then $|b_n-b|<\dfrac{\epsilon}{2M}$
Let $\epsilon > 0$ be arbitrary. Choose N = $\max(N_1, N_2)>0$
Suppose $n > N$, then
\begin{align*} |a_nb_n - ab| &= |a_nb_n - a_nb + a_nb - ab|\\ &=|a_n (b_n-b)+b(a_n-a)|\qquad\text{(by algebra)}\\ &\leq |a_n||b_n - b| + |b| |a_n - a|\qquad\text{(by triangle inequality)}\\ &< M\dfrac{\epsilon}{2M} + |b|\dfrac{\epsilon}{2|b|}\\ &=\dfrac{\epsilon}{2}+\dfrac{\epsilon}{2}=\epsilon \end{align*}