~ / .profile ไม่โหลดเมื่อใช้ SSH (Ubuntu)


22

แก้ไขเพื่อสะท้อนปัญหาที่ฉันต้องการแก้ไข:

ฉันต้องตั้งค่าสภาพแวดล้อมทับทิมของฉันเพื่อให้สามารถปรับใช้ผ่าน Capistrano

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

ฉันใส่สิ่งเหล่านี้ใน ~ deploy / .profile แต่เมื่อฉันใส่เข้าไปพวกเขาจะไม่ถูกเรียกใช้ ไอเดีย?

ฉันใช้ Ubuntu 12.04


คำถามเดิมคือ:

เมื่อฉัน ssh ไปยังบัญชีอื่นที่ localhost มันจะไม่โหลด. profile ของฉัน ฉันจะบังคับให้ ssh โหลดได้อย่างไร ฉันใช้ Ubuntu 12.04

คำตอบ:


15

คุณอาจระบุอย่างชัดเจนว่าคุณต้องการเริ่มเปลือกเข้าสู่ระบบแบบโต้ตอบ:

 ssh user@host bash --login -i 

"บทบาท"ของ~/.profile(. หรือ ~ / bash_profile) และ.bashrcสำหรับ SSH มีบางไฟล์อื่น ๆ (ดูman sshรายละเอียด):

~ / .ssh / สภาพแวดล้อม

มีนิยามเพิ่มเติมสำหรับตัวแปรสภาวะแวดล้อม ดูสภาพแวดล้อมด้านบน

~ / .ssh / RC

คำสั่งในไฟล์นี้ถูกเรียกใช้โดย ssh เมื่อผู้ใช้ล็อกอินก่อนที่เชลล์ของผู้ใช้ (หรือคำสั่ง) จะเริ่มต้นขึ้น ดูหน้าคู่มือ sshd (8) สำหรับข้อมูลเพิ่มเติม


“ คุณอาจ” ไม่บ่อยนักเพราะ ssh กำลังทำงานโดยเครื่องมืออื่น ๆ (การส่งต่อเนื่อง) และคำสั่งไม่สามารถเปลี่ยนแปลงได้ง่าย
Jan Hudec

6

.profileถูกโหลดสำหรับเชลล์ล็อกอินเท่านั้นซึ่งเซสชัน ssh ไม่ได้ (ตามค่าเริ่มต้น) หากคุณต้องการให้บางสิ่งบางอย่างทำงานเมื่อเริ่มต้นสำหรับเชลล์แบบโต้ตอบทั้งหมดให้ใส่.bashrcแทน ( .zshrcหรือสิ่งที่เชลล์ใช้)

นอกจากนี้หากคุณเพียงต้องการเข้าสู่บัญชีอื่นในเครื่องท้องถิ่น ssh อาจ overkill คุณอาจต้องการใช้suหรืออะไรก็ได้แทน


3
ดูเหมือนว่า.bashrcจะไม่โหลดอย่างใดอย่างหนึ่ง
kenorb

สิ่งนี้ไม่ถูกต้อง มันเป็นเปลือกเข้าสู่ระบบ จากหน้า man: "ถ้าระบุคำสั่งมันจะถูกเรียกใช้งานบนรีโมตโฮสต์แทนเชลล์ล็อกอิน"
mkj

~ / .zshenv ใช้ได้สำหรับฉัน unix.stackexchange.com/questions/4921/sh-startup-files-over-ssh
user91155

เมื่อ ssh ได้รับคำสั่งให้รันมันจะมีค่าเริ่มต้นที่จะไม่จัดสรร tty จากนั้นเชลล์จะไม่เป็น "แบบโต้ตอบ"
Jan Hudec

4

การใช้ bash ควรส่งผลให้อ่าน~/.bashrcได้ ต่อไปนี้อาจช่วย ksh และ sh (ทุบตีในโหมด sh) หรือเมื่อคุณ~/.bashrcไม่ได้ถูกเรียกใช้ระหว่างการเข้าสู่ระบบ

คำปรึกษา sshd ~/.ssh/environment(เช็ค sshd_config (5) สำหรับสิทธิ์) และหรือ~/.ssh/sshrc ~/.ssh/rcนี้จะช่วยให้ความเป็นไปได้ที่จะติดตั้งENV=~/.profileหรือBASH_ENV=~/.profileและSSH_LOGIN=Y

ใน~/.profileรูปแบบฉันต่อไปนี้ (แทนที่ENVด้วยBASH_ENVเมื่อใช้ทุบตี):


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation


0

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

  • Zsh อ่าน~/.zshenvแม้ในกรณีนี้; ไม่มีไฟล์ปรับแต่งที่สอดคล้องสำหรับการทุบตี
  • ถ้าPermitUserEnvironmentตัวเลือกในจุ๊จะอ่าน/etc/sshd_config ~/.ssh/environmentน่าเสียดายที่ตัวเลือกนี้มีค่าเริ่มต้นเป็นปิด
  • ถ้าpam_env.soเรียกว่ามีuser_readenv=1ในก็จะอ่าน/etc/pam.d/sshd ~/.pam_environmentในขณะที่มันไม่ได้เริ่มต้นของโมดูลก็จะเรียกว่าวิธีการที่อย่างน้อยในอูบุนตู
  • หากทุกอย่างล้มเหลวคุณสามารถกำหนดcommand=คำสั่งในไฟล์คีย์ที่ได้รับอนุญาตเรียกสคริปต์ wrapper ที่ตั้งค่าสภาพแวดล้อมและดำเนินการ$SSH_ORIGINAL_COMMANDในตอนท้าย (ฉันคำสั่งเป็นหนึ่งสำหรับเชลล์ดังนั้น eval จึงเหมาะสมที่นี่ แต่ฉันไม่แน่ใจ) .

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