ฉันตอบตัวเองในที่สุดฉันก็ค้นพบความลับ -t
ตัวเลือกทั้งสำหรับssh
และ-l
ตัวเลือกสำหรับbash
จะนำไปสู่การเข้าสู่ระบบเปลือกด้วยตัวเอง - แต่พวกเขาทำงานร่วมกัน
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'
ไดเรกทอรีการเปลี่ยนแปลงตั้งค่าตัวแปรสภาพแวดล้อมแล้วเริ่มการเข้าสู่ระบบเชลล์ที่เหมาะสม (ความแตกต่างเดียวที่ฉันพบจนถึงตอนนี้/etc/motd
ก็คือว่าไม่ได้แสดงด้วยวิธีนี้ - มันเป็นความรับผิดชอบของคนปกติ ssh
หรืออื่น ๆ ไม่ใช่ทุกอย่างที่ดูเหมือน ทำงานได้อย่างสมบูรณ์และตัวแปรสภาพแวดล้อมทั้งหมดเหมือนกัน)login
bash
การเปลี่ยนแปลงสภาพแวดล้อม / ไดเรกทอรีเหล่านี้เกิดขึ้นหลังจาก ssh ดังนั้นจึงไม่ถูก จำกัด โดยPermitUserEnvironment
และการตั้งค่าที่เกี่ยวข้อง (ตรงตามที่วางแผนไว้) แต่ก่อน.bashrc
/ .profile
ดำเนินการ สิ่งนี้มีอัพไซด์และดาวน์ด์ - ยากที่จะแทนที่สิ่งที่ได้รับจากสคริปต์ bash init เช่นPS1
แต่ง่ายกว่าที่จะแพ็คค่าที่ถูกต้องลงในssh
บรรทัดคำสั่งและ.profile
ทำให้การยกของหนักขึ้น
และถ้าจำเป็นจริง ๆ แล้วมันค่อนข้างง่ายที่จะได้รับการทุบตีในการดำเนินการบางอย่างหลังจากที่.profile
มีบรรทัดคำสั่งเช่นssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'
- น่าเกลียดมากเมื่อวางแบบนั้น แต่.profile
ไฟล์ทางเลือกเหล่านี้สามารถเตรียมมาก่อน (เท่าที่ฉันสามารถบอกbash
ได้ว่ามีตำแหน่งผู้สมัครไม่กี่คนสำหรับ.profile
สคริปต์และจะดำเนินการสถานที่แรกที่พบ - . file
ไม่มีข้อผิดพลาดอัตโนมัติดังกล่าวดังนั้นคุณจะต้องตรวจสอบว่าปกติของคุณอยู่ที่ไหนprofile
ถ้าคุณต้องการทำ)