Bagaimana cara mengatur PATH saat menjalankan perintah ssh?


18

Dengan asumsi pengguna memiliki /bin/bashshell di /etc/passwd. Kemudian ssh user@host commandjalankan perintah menggunakan Bash. Namun, shell itu bukan login atau interaktif, yang berarti tidak ~/.bash_profilejuga ~/.bashrctidak bersumber. Dalam hal itu bagaimana cara mengatur PATHvariabel lingkungan agar dapat dieksekusi dan dieksekusi? Apakah disarankan untuk awalan dengan perintah yang sebenarnya source ~/.bashrc?


5
.bashrcbersumber, tetapi mungkin memiliki tes untuk interaktivitas di atas. Hal-hal yang Anda masukkan sebelum pemeriksaan itu harus berlaku, dan itulah yang saya lakukan untuk memaksa PATH ketika server tidak mengizinkan lingkungan pengguna atau penggunaan ~/.pam_environment.
muru

Jawaban:


18

Anda memiliki beberapa kemungkinan:

  • Atur PATHserver pada ~/.ssh/environment(perlu diaktifkan oleh PermitUserEnvironment yesdalam sshd_config).
  • Gunakan path lengkap ke biner
  • Seperti yang Anda sebutkan, sumber secara manual .bashrc: awali perintah dengan . ~/.bashrc(atau source)

Ini sangat tergantung pada use case, ke mana Anda akan pergi.


6
Sumber secara manual ~/.bashrctidak perlu, ini terjadi secara default. Faktanya, menurut saya itu ide yang buruk.
sorontar

$PATHtidak berkembang dari ~/.ssh/environment, setidaknya tidak dalam OpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019.
Jaakko

1
@Jaakko Mungkin dinonaktifkan di sshd_config using PermitUserEnvironment(default dalam versi terbaru)
Jakuje

Saya menemukan jawabannya, itu tidak berkembang karena saya menambahkan garis PATH="$PATH:/new/path"ke saya ~/.ssh/environmentketika seharusnyaPATH=$PATH:/new/path
Jaakko

4

Anda menyamakan pengaturan lokal ke pengaturan jarak jauh .

Secara lokal, contoh bash, shell berjalan saat ini di mana Anda menulis:

ssh user@host command

Akan menjalankan perintah ssh (tidak lebih) sebagai ssh klien.
Untuk melakukannya shell lokal tidak perlu memulai sub-shell atau shell baru atau login.

Perintah dieksekusi sebagai lsperintah adalah: secara lokal.

Ini adalah perintah ssh klien yang membuka koneksi jaringan ke sistem jarak jauh , di mana, jika dikonfirmasi dengan benar, a shell baru akan mulai menjalankan perintah yang ditulis sebagai argumen ke ssh, atau, jika tidak ada argumen yang diberikan, mengharapkan perintah lebih lanjut pada koneksi itu.

Itu baru Remote shell akan menjadi shell login karena pengguna jarak jauh (ke sistem itu) perlu diautentikasi untuk login. Atau, jika beberapa perintah tertentu diberikan, jalankan saja perintah tersebut dengan hak pengguna yang diautentikasi.

Anda dapat melihat file mana yang diambil dengan menambahkan a $file sourcedke awal setiap file (di sistem jarak jauh ) (root diperlukan untuk mengubah /etc/file):

$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done

Dan kemudian jalankan konsol ssh:

$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read

Dalam hal ini, kedua bashrcfile dibaca karena setiap profilefile memiliki perintah untuk memasukkannya, bukan karena shell login langsung mengambilnya.

$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read

Dalam sistem ini, dimana bashrc dibaca dalam kedua kasus.

Tidak perlu menambahkan source ~/.bashrc perintah untuk mengeksekusi.

Ubah PATH

Yang perlu Anda lakukan adalah memasukkan pengaturan yang benar untuk mengubah "$ PATH", baik /etc/bash.bashrcuntuk semua pengguna yang memulai shell di sistem ini. Atau ~/.bashrcuntuk setiap pengguna yang membutuhkannya. Anda dapat menambahkan (atau mengedit) kerangka pengguna .bashrcagar /etc/skel/pengguna baru yang dibuat memiliki file yang benar tersedia.

Di atas hanya berlaku untuk bash. Jika Anda memerlukan pengaturan untuk semua shell, mungkin mengatur PATH variabel lingkungan menggunakan file ssh ~/.ssh/environmentuntuk setiap pengguna yang membutuhkannya. Atau gunakan /etc/ssh/sshrcuntuk pengaturan global dalam sistem di mana server ssh berjalan (silakan baca bagian File di man sshduntuk beberapa detail tambahan).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.