Masalah saya adalah, saya harus mengatur variabel env (seperti GIT_EXEC_PATH) di server. Saya membutuhkan variabel itu dengan setiap koneksi (jadi dengan bash dan dengan perintah jarak jauh baik). Saya berhasil mengatur variabel-variabel tersebut dengan bash dengan .bash_profile, tetapi saya memiliki masalah dengan perintah-perintah jarak jauh. Saya menemukan bahwa adalah mungkin untuk menulis perintah di ~ / .ssh / Authorized_key sebelum kunci rsa yang sebenarnya, tetapi saya tidak ingin selalu menulis di sana, saya memerlukan solusi permanen ... Saya menemukan bahwa ~ / .ssh File / rc dieksekusi oleh setiap login ssh, jadi saya meletakkan deklarasi variabel env saya di sana, tetapi tidak berhasil. Variabel diatur dalam file rc, tetapi setelah itu mereka menghilang. : S Mungkin file rc berjalan dalam subkulit: S Apakah ada cara untuk mendefinisikan variabel-variabel tersebut di bash dan dalam perintah-perintah jarak jauh tanpa duplikasi kode?
Edit:
Saya mengedit pertanyaan, karena server adalah host bersama yang di-godaddy, sehingga memiliki konfigurasi unik. File / etc / ssh / sshd_config dan file / etc / ssh / ssh_config kosong. Ada komentar di file-file itu, jika Anda penasaran saya dapat menyalinnya di sini.
- ~ / .Bash_profile bersumber (hanya dengan koneksi bash),
- the ~ / .bashrc tidak pernah bersumber,
- profil ~ /. tidak pernah bersumber,
- lingkungan ~ / .ssh / tidak pernah bersumber,
- ~ / .ssh / rc bersumber (dengan bash dan remote keduanya), tapi saya pikir ini disebut dalam subkulit, karena variabel-variabelnya menghilang.
- The ~ / .ssh / authorized_key bersumber dari setiap waktu, tapi saya harus menulis perintah sebelum setiap kunci rsa (jadi saya tidak ingin mengkonfigurasi dengan itu).
Ringkasan:
Saya dapat mengkonfigurasi bash dengan baik (dengan .bash_profile), tetapi saya tidak dapat mengkonfigurasi panggilan jarak jauh. Itulah masalahnya. Saya mencari file yang bersumber dari perintah bash dan remote.
Sebagai contoh:
Perintah git-upload-pack menemukan file exe, karena variabel env GIT_EXEC_PATH diatur, tetapi dengan remote: "git clone [email protected]: myrepo local / myrepo" server tidak menemukan perintah itu, karena GIT_EXEC_PATH tidak diatur.
Sunting2:
Menurut ini , dan printenv saya log: ~ / .ssh / rc berjalan di shell normal, bukan di subshell, jadi itu teka-teki mengapa variabel env tidak menempel ...
Saya membuat executable: ~ / logenv :
echo "" >> mylog.txt
date >> mylog.txt
printenv >> mylog.txt
echo "" >> mylog.txt
Dan letakkan ini di ~ / .ssh / rc :
export AAA=teszt
source ~/logenv
Dengan bash login & "source logenv" hasilnya adalah:
Tue May 15 04:21:37 MST 2012
TERM=cygwin
SHELL=/bin/bash
SSH_CLIENT=censored
SSH_TTY=/dev/pts/2
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv
Tue May 15 04:21:41 MST 2012
HOSTNAME=censored
TERM=cygwin
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=censored
Dengan remote "ssh [email protected] 'exec ~ / logenv'" hasilnya adalah:
Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
AAA=teszt
MAIL=/var/mail/myuser
PATH=/usr/local/bin:/bin:/usr/bin
PWD=/home/content/65/7962465
SHLVL=3
HOME=/var/chroot/home/content/65/7962465
LOGNAME=myuser
SSH_CONNECTION=censored
_=/usr/bin/printenv
Tue May 15 04:25:52 MST 2012
SHELL=/bin/bash
SSH_CLIENT=censored
USER=myuser
PATH=/usr/local/bin:/bin:/usr/bin
MAIL=/var/mail/myuser
PWD=/home/content/65/7962465
HOME=/var/chroot/home/content/65/7962465
Jadi file rc bersumber, tetapi setelah itu variabel disappering ...: S
sumber
Jawaban:
Dengan asumsi Anda memiliki
UsePAM yes
di/etc/ssh/sshd_config
, dan dengan asumsi Anda ingin variabel lingkungan ini ditetapkan untuk setiap pengguna, Anda dapat memiliki variabel pam set lingkungan untuk Anda. Jika Anda memiliki variabel lingkungan yang ditentukan di dalamnya,/etc/gitenv
Anda dapat menambahkan baris ini/etc/pam.d/sshd
Atau dengan mendeteksi file ini, Anda mungkin menemukan bahwa sudah ada pam_env.so yang digunakan, dan sudah ada file yang dapat Anda tambahkan. Berhati-hatilah, dan pastikan Anda telah menguji perubahan Anda sepenuhnya sebelum mengakhiri sesi ssh Anda, karena ketika Anda mengacaukan pam, Anda dapat sepenuhnya menghancurkan kemampuan Anda untuk masuk ke server Anda, jika Anda tidak hati-hati.
sumber
/etc/environment
bersumberpam_env.so
dari defaultSaya mengatur beberapa variabel lingkungan untuk koneksi SSH saya menggunakan
~/.ssh/environment
. File dapat berisi variabel dalam formulirVAR=value
, tidak perlu mengekspornya secara eksplisit.Namun, file konfigurasi pengguna ini diabaikan secara default oleh proses server SSH kecuali opsi PermitUserEnvironment diatur ke ya. Oleh karena itu Anda perlu memastikan untuk mengedit / etc / sshd_config di server SSH untuk menambah atau memperbarui parameter ini:
Anda perlu memuat ulang konfigurasi server SSH. Pada RHEL atau Suse Linux yang Anda lakukan (sebagai root)
(Mungkin ganti sshd dengan ssh jika tidak berhasil)
Di Ubuntu (menggunakan pemula) Anda lakukan
Di Linux lain, Anda dapat mencoba (sebagai root)
(Ganti sshd dengan ssh atau openssh atau apa pun yang sesuai dengan skrip init server SSH)
sumber
Saya tidak lagi memiliki host yang dibagikan secara gaduh, jadi saya tidak dapat memeriksa apakah solusi yang diajukan valid. Ini akan tetap menjadi jawaban yang diterima, karena itu berhasil oleh saya ketika saya mengajukan pertanyaan. Jawaban lain mungkin juga berfungsi. Saya membiarkan komunitas memutuskan dengan upvotes.
Baik. Solusinya adalah bahwa tidak ada solusi pada host bersama godaddy. Saya mencoba semuanya, tetapi tidak ada yang berhasil, jadi saya memutuskan untuk tetap menggunakan ~ / .ssh / official_keys:
Di ~ / connect.sh:
Dan di ~ / .env_profile:
Jadi saya harus menyalin perintah = "..." ke setiap kunci rsa di otor_keys. Ini adalah duplikasi kode, tetapi saya tidak berpikir ada solusi lain pada host bersama godaddy.
sumber
Jika Anda menggunakan
bash
shell Anda, coba tambahkan pengaturan lingkungan ke.bashrc
.Periksa dulu apakah ini bisa dijalankan saat login, mungkin tidak karena file standar sering memiliki sesuatu seperti:
di awal mereka. perubahan apa pun yang ingin Anda lakukan bahkan untuk login non-interaktif harus melewati pernyataan seperti itu.
.profile
adalah tempat yang lebih umum untuk menempatkan konfigurasi seperti ini dan dihormati oleh sebagian besar shell (pada pengaturan Debian default itu adalah~/.profile
panggilan~/.bashrc
di tempat pertama). Anda mungkin perlu lebih hati-hati mengedit.profile
jika seandainya itu ditafsirkan oleh shell lain - yaitu mencoba untuk menghindari menggunakanbash
ekstensi tertentu.Edit
Jika Anda memiliki
.bash_profile
edit, alih-alih.profile
: bash akan menggunakannya demi file yang lebih umum, dan Anda dapat menggunakan hal-hal khusus bash dengan aman di sana.sumber
Anda dapat menggunakan perintah untuk semua pengguna / kunci tanpa menambahkan bagian perintah di otor_keys dengan menambahkan baris ini ke file sshd_config:
Dalam hal ini saya sarankan Anda menggunakan jalur absolut untuk skrip
sumber
Saya mengusulkan Anda pendekatan lain.
Anda mengatur file dengan deklarasi variabel lingkungan Anda dan kemudian Anda sumber setiap kali Anda memanggil perintah jarak jauh.
Contoh: Anda meletakkan variabel yang diperlukan di ~ / .my_var.rc dan kemudian untuk setiap perintah jarak jauh yang Anda lakukan
ssh user@remote bash -c "source ~/.my_var.rc; <your command>"
Jika ini cocok untuk Anda, Anda dapat memperbaiki konsep ini dan membuat skrip untuk kenyamanan. Jika Anda hanya membutuhkannya untuk perintah git, maka saya akan membuat skrip git.sh yang akan melakukan ini:
Dengan asumsi skrip ini ada di direktori home Anda, Anda akan menyebutnya:
ssh user@remote git.sh pull origin master
Catatan: ini adalah titik awal yang sederhana. Misalnya, itu tidak mendukung parameter dengan spasi.
sumber
ssh -Y user@remote git.sh gui
Ini tidak menjawab pertanyaan umum tentang PATHS, tetapi memungkinkan Anda untuk menggunakan repositori git pada server jauh yang tidak memiliki git di jalurnya, dan yang Anda tidak memiliki akses root. Solusi ini berasal dari halaman ini .
Untuk juga mendorong dan mengambil:
sumber
/ etc / profile akan bersumber pada setiap koneksi dengan ssh-client.
sumber