ปกติ $ BASH_ENV ตั้งอยู่ที่ไหน


19

ฉันมีเซิร์ฟเวอร์ Linux คู่ที่ควรกำหนดค่าเหมือนกันอย่างไรก็ตามคำสั่ง ssh สำหรับหนึ่งในนั้นกำลังล้มเหลวสำหรับคำสั่งที่ต้องใช้พา ธ ที่ระบุไว้ใน ~ / .bashrc ตัวอย่างเช่นฉันสามารถใช้คำสั่งเช่นpwdทั้งแบบโต้ตอบและผ่าน ssh แต่ถ้าฉันลองเรียกใช้โปรแกรมที่อยู่ในโฟลเดอร์ bin ของแอปพลิเคชันมันจะทำงานในเชลล์แบบโต้ตอบสำหรับเซิร์ฟเวอร์ตัวใดตัวหนึ่งเท่านั้น

ไฟล์ / etc / profile และ / etc / environment บนเซิร์ฟเวอร์ทั้งสองเหมือนกันอย่างไรก็ตาม $ BASH_ENV ถูกตั้งค่าเป็น ~ / .bashrc บนเซิร์ฟเวอร์ที่ทำงานอย่างถูกต้อง ฉันต้องการตั้งค่า $ BASH_ENV บนเซิร์ฟเวอร์ที่ไม่ทำงาน แต่ฉันต้องการตั้งไว้ในตำแหน่งเดียวกับที่ตั้งไว้ในเซิร์ฟเวอร์ที่ใช้งานได้ มีสถานที่ใดบ้างที่ Linux จะทำงานในเวลาที่ล็อกอินไม่โต้ตอบเช่นคำสั่ง ssh จากคอมพิวเตอร์เครื่องอื่น?

แก้ไข: บรรทัดใน / etc / passwd สำหรับผู้ใช้ระบุ / bin / bash บนเซิร์ฟเวอร์ทั้งสอง นะ ~ / .bash_profile if [ -f ~/.bashrc ]; then . ~/.bashrc; fiไฟล์เซิร์ฟเวอร์ทั้งสองเหมือนกันและมี ข้อแตกต่างระหว่างระบบคือ $ BASH_ENV เป็นสตริงว่างบนเซิร์ฟเวอร์ที่ไม่ทำงานและฉันไม่สามารถหาตำแหน่งที่ตั้งไว้ในเซิร์ฟเวอร์ที่ใช้งานได้

แก้ไข 2: ไฟล์ ~ / .ssh / environment บนเซิร์ฟเวอร์ทั้งสองมี BASH_ENV = ~ / .bashrc


1
/ etc / passwd เหมือนกันบนเซิร์ฟเวอร์ทั้งสองหรือไม่ หาก bash ถูกเรียกว่า "/ bin / sh" แทน "/ bin / bash" จะไม่อ่านไฟล์ bashrc ใด ๆ (เฉพาะไฟล์โปรไฟล์)
Freiheit

ไม่เหมือนกัน แต่ผู้ใช้ที่ฉันส่งคำสั่งมีบรรทัดเดียวกันใน / etc / passwd บนทั้งสองระบบ
บาซิล

แล้วประมาณ ~ / .profile และ ~ / .bash_profile
Freiheit

พวกเขาเหมือนกันและมีทั้งif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
เพรา

คุณยืนยันแล้วว่า / etc / bashrc และ /etc/profile.d/* เหมือนกัน? ~ / .bash_login? /etc/pam.d/*? /etc/security/pam_env.conf?
Freiheit

คำตอบ:


21

BASH_ENVจะถูกตั้งค่าผ่านสภาพแวดล้อมเท่านั้นหรือสคริปต์อื่นที่มีที่มาในระหว่างการเริ่มต้น สำหรับเชลล์ที่ไม่มีการโต้ตอบเชลล์จะพยายามจัดหาไฟล์เพิ่มเติมหากเชลล์นั้นเป็นเชลล์ล็อกอินด้วย (ในกรณีที่มันจะอ่าน~/.bash_profile, ~/.bash_loginและ~/.profile... แต่ถ้ามันถูกทำที่คุณจะไม่ประสบปัญหา)

สถานที่แรกที่ต้องดูคือสภาพแวดล้อมที่มีการเรียกใช้ subshell

  • BASH_ENVตัวแปรที่ส่งออกจะถูกส่งผ่าน โปรดทราบว่าสิ่งนี้อาจถูกฝังในไฟล์ที่มา
  • BASH_ENV=blah /path/to/somecommand.shมันสามารถนำมาเลี้ยงในเป็นพารามิเตอร์ในบรรทัดเดียวกันเรียกสคริปต์คือ มันดูโดดเด่นเหมือนนิ้วโป้งที่เจ็บดังนั้นคุณน่าจะจับมันได้

ถ้ามันถูกตั้งค่าหลังจากที่คุณเข้าสู่ระบบ แต่คุณไม่สามารถรู้ได้ว่าที่ไหนคุณอาจต้องดูสิ่งที่รับผิดชอบในการสร้างสภาพแวดล้อมในการเข้าสู่ระบบ

  • ไฟล์ปกติทั้งหมดที่ได้รับมาจากเปลือกเข้าสู่ระบบ man bashสำหรับรายการที่ครบถ้วนสมบูรณ์

  • PAM : เป็น Freiheit ปัญหาในส่วนความเห็นตรวจสอบ/etc/security/pam_env.confและไฟล์เพิ่มเติมใด ๆ pam_env.soที่มีการอ้างอิงโดย โมดูล PAM อื่น ๆ อาจมีความรับผิดชอบเช่นกัน แต่หากการกำหนดค่า PAM ของคุณดูเหมือนกันนี่อาจไม่เป็นเช่นนั้น

  • sshd : มันจะสแกนไฟล์ต่อไปนี้ตามลำดับ:

    • ~/.ssh/environment(ก่อนที่จะเปลี่ยนเป็นโฮมไดเร็กทอรีเฉพาะเมื่อPermitUserEnvironmentเปิดใช้งานsshd_config)
    • ~/.ssh/rc (หลังจากเปลี่ยนเป็นโฮมไดเรกทอรีแล้ว)
    • /etc/ssh/sshrc(ถ้า~/.ssh/rcไม่มี)

หมายเหตุ: sshdจะสแกนหาenvironment=valueบรรทัดในไฟล์คีย์ที่ได้รับอนุญาตของผู้ใช้ (หากPermitUserEnvironmentเปิดใช้งาน) แต่จะไม่ชัดเจนจากหน้าคนที่ขั้นตอนนั้นอยู่ในลำดับด้านบน


ฉันพบความแตกต่าง! PermitUserEnvironment yesถูกตั้งค่าใน / etc / ssh / sshd_config บนเซิร์ฟเวอร์ที่ใช้งานได้ แต่ไม่ใช่ปัญหา ฉันเปลี่ยนมัน แต่ฉันเพิ่งทดสอบคำสั่งและมันไม่ทำงานอีกครั้ง ไฟล์นี้มีการแยกวิเคราะห์ทุกครั้งที่ฉันพยายาม ssh หรือไม่ ฉันไม่มีไฟล์ ~ / .ssh / rc สำหรับผู้ใช้ที่ฉันทำงานอยู่และไม่มีไฟล์ / etc / ssh / sshrc ในทั้งสองระบบ
เพรา

โอ้ฉันคิดว่าฉันต้องเริ่มต้นใหม่ ssh? /etc/init.d/sshd?
เพรา

@Basil sshdใช่คุณจะต้องเริ่มต้นใหม่ นอกจากนี้ยังหมายถึงอาจมีไฟล์บนเซิร์ฟเวอร์ที่ใช้งานได้ (ตรวจสอบรายการที่ฉันให้คุณsshd) ที่ตั้งค่าสภาพแวดล้อม
Andrew B

ใช่นั่นเป็นส่วนที่น่าผิดหวัง - ทุกอย่างที่ฉันต้องการตั้งอยู่ใน. bashrc ซึ่งไม่ได้ทำงาน :) ขอบคุณมากสำหรับความช่วยเหลือของคุณ - ฉันกำลังกำหนดเวลาการเปลี่ยนแปลงเพื่อเริ่มต้น SSH ใหม่และฉันจะรายงานกลับ ฉันคิดว่ามันจะทำงาน
โหระพา

ฉันเพิ่งเริ่มต้นใหม่ SSH และคำสั่งที่ไม่ใช่แบบโต้ตอบของฉันกำลังทำงาน! ขอบคุณมากสำหรับความช่วยเหลือของคุณฉันไม่เคยพบฟิลด์นั้นด้วยตัวเอง
โหระพา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.