OpenSSH (kemungkinan besar apa yang Anda jalankan) memutuskan apakah akan membuat shell login atau tidak, dan itu hanya dilakukan jika Anda tidak menjalankan perintah tertentu. Dari man ssh :
If command is specified, it is executed on the remote host instead of a login shell.
Jadi ini adalah pilihan implementasi untuk server ssh apakah ingin membuat shell login atau tidak, dan jika Anda memberikan perintah untuk dijalankan, tidak.
Sedangkan ssh melakukan login, jika Anda memintanya menjalankan perintah dan keluar, ini jauh lebih mirip dengan membuat shell hanya untuk menjalankan perintah itu daripada mendapatkan lingkungan login. Tampaknya, mengingat hal itu, orang yang menulis OpenSSH memutuskan untuk memperlakukannya seperti tugas semacam itu.
Mereka membuat shell non-interaktif, non-login untuk mengeksekusi perintah, karena itulah semangat menjalankan perintah dalam konteks/shell lain. Namun, biasanya, shell non-interaktif tidak akan secara otomatis mencari ~/.bashrc yang jelas terjadi di sini. bash sebenarnya mencoba untuk membantu kami di sini. Dari dokumen
Dipanggil oleh daemon shell jarak jauh
Bash mencoba untuk menentukan kapan dijalankan dengan input standarnya yang terhubung ke koneksi jaringan, seperti ketika dijalankan oleh daemon shell jarak jauh, biasanya rshd, atau daemon shell aman sshd. Jika Bash menentukan sedang dijalankan dengan cara ini, ia membaca dan mengeksekusi perintah dari ~/.bashrc, jika file itu ada dan dapat dibaca. Itu tidak akan melakukan ini jika dipanggil sebagai sh. Opsi --norc dapat digunakan untuk menghambat perilaku ini, dan opsi --rcfile dapat digunakan untuk memaksa file lain untuk dibaca, tetapi rshd atau sshd umumnya tidak memanggil shell dengan opsi tersebut atau mengizinkannya ditentukan.
mengapa perilaku ini terletak pada level yang lebih rendah dari shell:ssh host (kasus "login shell") menggunakan pseudoterminal pada host jarak jauh, untuk berkomunikasi antara sshd proses server dan shell; ssh host command menggunakan pipa antara sshd dan command , alih-alih. Pseudoterminal diperlukan untuk menggunakan interpreter perintah secara interaktif, seperti shell, atau mode "read-eval-print" dari bahasa scripting; mereka menerapkan banyak fitur yang ramah manusia seperti dapat mundur dari kesalahan ketik. Tetapi mereka memiliki lebih banyak overhead dan (bergantung pada konfigurasi) tidak mengizinkan data arbitrer melewati yang tidak dimodifikasi, jadi SSH menghindari penggunaannya saat interaksi tidak akan terjadi.
Kadang-kadang perintah SSH/tidak ada perintah heuristik salah; itu dapat diganti dengan -t dan -T sakelar. Misalnya, untuk masuk ke mesin jarak jauh dan segera memasang kembali screen yang ditangguhkan sesi, Anda perlu melakukan ssh -t host screen -R; ssh host screen -R akan menyebabkan screen untuk mengeluh tentang tidak terhubung ke terminal. Saya tidak bisa memikirkan situasi ketika Anda benar-benar menginginkan untuk menggunakan -T , tetapi itu ada di sana jika Anda pernah menemukannya.