Tôi tự trả lời, vì cuối cùng tôi đã khám phá ra bí mật. Không có -ttùy chọn nào ssh, cũng không phải -ltùy chọn cho việc bashtự mình đăng nhập shell - nhưng kết hợp chúng lại hoạt động.
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'thay đổi biến thư mục, bộ môi trường, và sau đó bắt đầu vỏ đăng nhập đúng (sự khác biệt duy nhất mà tôi đã tìm thấy cho đến nay là /etc/motdkhông được hiển thị theo cách này - đó là bình thường ssh's hoặc login' s trách nhiệm, chứ không phải bash's - khác hơn tất cả mọi thứ mà dường như để hoạt động hoàn hảo, và tất cả các biến môi trường là giống hệt nhau).
Những thay đổi môi trường / thư mục này xảy ra sau ssh, vì vậy chúng không bị hạn chế bởi PermitUserEnvironmentvà các cài đặt liên quan (chính xác như kế hoạch), nhưng trước .bashrc/ .profileđược thực thi. Điều này có những mặt trái và nhược điểm - khó hơn là ghi đè lên thứ gì đó được đặt từ các tập lệnh bash init như PS1, nhưng dễ dàng hơn để đóng gói chính xác các giá trị đúng vào sshcác dòng lệnh và phải .profilethực hiện tất cả các công việc nặng.
Và nếu thực sự cần thiết, thực sự khá dễ dàng để bash thực thi một cái gì đó sau .profiledòng lệnh như ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'- rất xấu khi đặt theo cách đó, nhưng những .profiletệp thay thế này có thể được chuẩn bị trước. (theo như tôi có thể nói bashcó một vài vị trí ứng cử viên cho .profilekịch bản và sẽ thực thi vị trí đầu tiên được tìm thấy - . filekhông có dự phòng tự động như vậy, vì vậy bạn sẽ cần kiểm tra xem bình thường của bạn ở đâu profilenếu bạn muốn làm điều đó)