ฉันตอบตัวเองในที่สุดฉันก็ค้นพบความลับ -tตัวเลือกทั้งสำหรับsshและ-lตัวเลือกสำหรับbashจะนำไปสู่การเข้าสู่ระบบเปลือกด้วยตัวเอง - แต่พวกเขาทำงานร่วมกัน
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'ไดเรกทอรีการเปลี่ยนแปลงตั้งค่าตัวแปรสภาพแวดล้อมแล้วเริ่มการเข้าสู่ระบบเชลล์ที่เหมาะสม (ความแตกต่างเดียวที่ฉันพบจนถึงตอนนี้/etc/motdก็คือว่าไม่ได้แสดงด้วยวิธีนี้ - มันเป็นความรับผิดชอบของคนปกติ sshหรืออื่น ๆ ไม่ใช่ทุกอย่างที่ดูเหมือน ทำงานได้อย่างสมบูรณ์และตัวแปรสภาพแวดล้อมทั้งหมดเหมือนกัน)loginbash
การเปลี่ยนแปลงสภาพแวดล้อม / ไดเรกทอรีเหล่านี้เกิดขึ้นหลังจาก 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ถ้าคุณต้องการทำ)