Saya memiliki pengguna yang tidak melakukan modifikasi pada $ PATH dalam file-file apa pun: ini persis dengan pengaturan default sistem. Dari shell login:
$ ssh example.com
user@example.com:~$ cat /tmp/hello.hs
#!/bin/bash
echo "$SHELL"
echo "$PATH"
user@example.com:~$ /tmp/hello.hs
/bin/bash
/usr/local/bin:/usr/bin:/bin
Persis seperti yang ditentukan dalam /etc/profile
. Saya menemukan ini agak tidak terduga:
$ ssh example.com '/tmp/hello.sh'
/bin/bash
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Seperti yang saya katakan, tidak ada modifikasi $ PATH di ~/.bashrc
, atau di /etc/bash.bashrc
. Juga ~/.ssh/environment
tidak. Yang ssh(1)
menyatakan bahwa variabel lingkungan PATH
adalah
Setel ke PATH default, seperti yang ditentukan saat kompilasi ssh.
tapi thread ini dari StackOverflow dan ini mailing list artikel menyarankan bahwa saya harus bisa mempengaruhi $ PATH untuk perintah yang diberikan hanya dengan memodifikasi / etc / profile, salah satu file shell startup, dll
Apa yang terjadi di sini?
.bashrc
mungkin juga bekerja, tetapi secara keseluruhan saya akan mengatasinya jika PATH penting. Atau mengapa tidak menentukan nama path lengkap jika Anda memerlukan cara 'perintah' untuk menjalankan ssh? :)bash(1)
Doa menunjukkan bahwa tidak ada file startup dibaca dalam mode ini, tapi saya tidak dapat menemukan dokumentasi di bagaimana ssh memohon shell. Ini tampaknya berlawanan dengan sumber yang ditautkan di atas, kecuali orang lain memiliki / etc / ssh / sshrc file startup yang tidak saya miliki. (Ada penyelesaian, tentu saja, tetapi intinya adalah memahami persis bagaimana Debian SSHD menangani jalur secara default.)/etc/profile
pembaruan jalur kotak jarak jauh untuk saya, makassh user@remotebox 'env'
tunjukkan padaku PATH yang diperbarui. Hal yang sama berlaku jika saya menambahexport PATH=$PATH:/my/testpath
.bashrc (tetapi dalam kasus saya di atas file sebelum memeriksa kerang interaktif (-z "$PS1"
).Saya bisa mendapatkan ssh untuk menjalankan perintah menggunakan jalur jarak jauh dengan menjalankan:
Di sini env dapat diganti dengan perintah apa pun yang Anda inginkan.
Saya memiliki kunci yang diotorisasi sehingga tidak perlu kata sandi untuk menjalankan perintah atau ssh.
sumber
Saya datang dengan solusi berbeda untuk memperbaiki masalah. Preferensi pribadi saya adalah membuat file konfigurasi baru alih-alih mengubah yang sudah ada. Dengan cara ini saya dapat lebih mudah menghapus perubahan dari konfigurasi default.
Berikut isinya
/etc/profile.d/ssh_login.sh
:Menggunakan
dropbear
di tempatopenssh-server
(ini juga harus bekerja dengan openssh), variabel SSH_CONNECTION akan diatur secara otomatis ketika saya login jarak jauh. Saya membuat konfigurasi profil shell baru untuk mendeteksi login SSH, menampilkan beberapa informasi di layar dan, yang paling penting, memuat pengaturan lingkungan global dari/etc/environment
untuk menggantikan nilai yang dikompilasi. Harap dicatat bahwa ini hanya memengaruhi shell SSH interaktif, bukan eksekusi perintah jarak jauh.Atau , jika Anda menggunakan openssh dan selalu ingin memuat lingkungan global, terlepas dari apakah itu shell interaktif, Anda dapat menempatkan symlink
~/.ssh/
seperti ini:Maka Anda perlu mengaktifkan
PermitUserEnvironment
opsi di/etc/sshd/sshd_config
. Hanya lakukan ini untuk pengguna tepercaya, karena ini dapat memungkinkan mereka untuk melewati pembatasan akses di beberapa konfigurasi menggunakan mekanisme seperti LD_PRELOAD. Silakan lihatman sshd_config
untuk informasi lebih lanjut, khususnya cara menggunakanMatch
blok untuk membatasi opsi untuk pengguna / grup tertentu.sumber
Jika Anda ingin jalur profil dimuat, coba:
di bagian atas skrip. Dengan begitu shell berada dalam mode interaktif saat menjalankan skrip.
http://linux.die.net/man/1/bash
sumber