Saya menggunakan Bash pada klien dan server. Saat menjalankan perintah melalui SSH:
ssh <host> 'declare'
memberikan daftar variabel shell.ssh <host> 'mount'
memberikan daftar mountpoints.
Namun, declare
adalah Bash builtin, sedangkan mount
perintah eksternal. Bagaimana SSH tahu mana yang harus dijalankan jika ada builtin shell dan perintah eksternal dengan nama yang sama di server?
/etc/passwd
. Jika/usr/sbin/nologin
Anda tidak dapat login.Jawaban:
The
ssh
menjalankan perintah yang Anda berikan dalam shell pengguna remote (yang diperoleh dari/etc/passwd
), sebagai terlihat dari kode sumber :Oleh karena itu perintah masing-masing yang dijalankan untuk contoh Anda pada server jarak jauh adalah:
bash -c declare
bash -c mount
Keduanya diteruskan ke
bash
dan dievaluasi. Built-in dievaluasi di dalam, dan perintah eksternal dipanggil seolah-olah Anda akan melakukannya dari prompt baris perintah lokal Anda.sumber
-t
beralih, tetapi masih tidak memuat file rc.sshd
(server) melakukan ini, bukanssh
(klien).