Ruby banking system program
There are a few things that I would do differently and/or change:


I usually find it easier to put all the public methods at the top and the private methods at the bottom instead of mixing them. This is also what I see most people do.
Be consistent. In pin_error you return an error message, in over_error you print the message (elsewhere you use puts). I would make both methods just puts the error message.
I would not assign an instance variable in amount just return the value and then change withdraw to use a local variable. I would also call it get_amount or something since it does more than just return an amount.

def withdraw
  amt = get_amount
  if  amt &lt;= @balance
    @balance -= amt
    puts "Withdrew: $#{amt}. Updated balance: $#{@balance}."  
  else
    over_error
  end
end       

The pin method is odd in that it returns the bin but also sets an instance variable unnecessarily. I would pass the pin into the constructor.
I would make pin_check actually check if the pin is correct and return true or false. I would also give it an active name, with a bang, like check_pin!