Adding my bit to the old thread for information because the accepted answer is not the real reason for .bashrc not being read for an ssh command. I got the hint after reading this answer.
The second last paragraph of the INVOCATION section in bash man page states that:
Bash attempts to determine when it is being run with its standard input connected to a network connection, as when executed by
the
remote shell daemon, usually rshd, or the secure shell daemon sshd. If bash determines it is being run in this fashion, it reads
and executes commands from ~/.bashrc and ~/.bashrc, if these files exist and are readable. It will not do this if invoked as sh.
The --norc option may be used to inhibit this behavior, and the --rcfile option may be used to force another file to be read, but
neither rshd nor sshd generally invoke the shell with those options or allow them to be specified.
Hence although the ssh command is run as a non-interactive user, .bashrc is still loaded.
But your OS may be adding checks at the top of .bashrc similar to the following (from Ubuntu 18.04) which exits .bashrc after the first few lines for a non-interactive invocation.
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
To prevent the checks, open .bashrc and comment those lines and your ssh commands will read the whole .bashrc which is the result, I suppose, you are expecting.