ปัญหาของฉันคือฉันต้องตั้งค่าตัวแปร env (เช่น GIT_EXEC_PATH) บนเซิร์ฟเวอร์ ฉันต้องการตัวแปรนั้นทุกการเชื่อมต่อ (ดังนั้นโดยการทุบตีและโดยคำสั่งระยะไกลอย่างใดอย่างหนึ่ง) ฉันจัดการเพื่อตั้งค่าตัวแปรเหล่านั้นด้วยการทุบตีด้วย. bash_profile แต่ฉันมีปัญหากับคำสั่งระยะไกล ฉันพบว่าเป็นไปได้ที่จะเขียนคำสั่งใน ~ / .ssh / authorized_keys ก่อนหน้าคีย์ rsa จริง แต่ฉันไม่ต้องการเขียนที่นั่นเสมอฉันต้องการวิธีแก้ปัญหาอย่างถาวร ... ฉันพบว่า ~ / .ssh ไฟล์ / rc ถูกเรียกใช้งานโดยการเข้าสู่ระบบ ssh ทุกครั้งดังนั้นฉันจึงใส่การประกาศตัวแปร env ไว้ที่นั่น แต่มันไม่ทำงาน ตัวแปรถูกตั้งค่าในไฟล์ rc แต่หลังจากนั้นตัวแปรจะหายไป : S บางทีไฟล์ rc ทำงานใน subshell: S มีวิธีใดที่จะกำหนดตัวแปรเหล่านั้นใน bash และในคำสั่งระยะไกลโดยไม่ต้องทำรหัสซ้ำ?
แก้ไข:
ฉันแก้ไขคำถามเพราะเซิร์ฟเวอร์เป็นโฮสต์ที่ใช้ร่วมกัน godaddy ดังนั้นจึงมีการกำหนดค่าที่ไม่ซ้ำกัน ไฟล์ / etc / ssh / sshd_config และไฟล์ / etc / ssh / ssh_config ว่างเปล่า มีความคิดเห็นในไฟล์เหล่านั้นหากคุณสงสัยฉันสามารถคัดลอกได้ที่นี่
- ~ / .bash_profile มีที่มา (โดยการเชื่อมต่อทุบตีเท่านั้น)
- ~ / .bashrc ไม่เคยมีที่มา
- ~ / .profile ไม่เคยมีที่มา
- ~ / .ssh / environment ไม่เคยมีที่มา
- ~ / .ssh / rc มีที่มา (โดย bash และ remote ทั้งคู่) แต่ฉันคิดว่ามันถูกเรียกเป็น subshell เนื่องจากตัวแปรหายไป
- ~ / .ssh / authorized_keys มีที่มาทุกครั้ง แต่ฉันต้องเขียนคำสั่งก่อนทุกคีย์ rsa (ดังนั้นฉันไม่ต้องการกำหนดค่าด้วย)
สรุป:
ฉันสามารถกำหนดค่า bash ได้ดี (ด้วย. bash_profile) แต่ฉันไม่สามารถกำหนดค่าการโทรระยะไกลได้ นั่นคือปัญหา. ฉันกำลังมองหาไฟล์ที่มาจากคำสั่ง bash และ remote
ตัวอย่างเช่น:
คำสั่ง git-upload-pack ค้นหาไฟล์ exe เนื่องจากมีการตั้งค่าตัวแปร env GIT_EXEC_PATH แต่ด้วยระยะไกล: "git clone user@domain.com: myrepo local / myrepo" เซิร์ฟเวอร์ไม่พบคำสั่งนั้นเนื่องจาก GIT_EXEC_PATH ไม่ได้ตั้งค่า
Edit2:
ตามนี้และบันทึก printenv ของฉัน: ~ / .ssh / rc ทำงานในเชลล์ปกติไม่ใช่ใน subshell ดังนั้นมันเป็นปริศนาว่าทำไมตัวแปร env ไม่ติด ...
ฉันสร้างไฟล์เรียกทำงาน: ~ / logenv :
echo "" >> mylog.txt
date >> mylog.txt
printenv >> mylog.txt
echo "" >> mylog.txt
และใส่สิ่งนี้ลงใน~ / .ssh / rc :
export AAA=teszt
source ~/logenv
โดย bash login & "source logenv"ผลลัพธ์คือ:
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
โดยรีโมท"ssh myuser@domain.com 'exec ~ / logenv'"ผลลัพธ์คือ:
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
ดังนั้นไฟล์ rc จึงมีที่มา แต่หลังจากนั้นตัวแปรจะหายไป ... : S