Я отвечаю сам за себя, так как наконец-то открыл секрет. Ни -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/ .profileget. У этого есть свои плюсы и минусы - сложнее просто переопределить что-то, что устанавливается из сценариев bash init PS1, но проще упаковать правильные значения в sshкомандные строки и .profileвыполнить всю тяжелую работу.
И если это действительно необходимо, на самом деле довольно легко заставить bash выполнить что-то после .profileс помощью командной строки, как ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'- очень уродливо, если говорить таким образом, но эти альтернативные .profileфайлы можно подготовить раньше. (насколько я могу судить, у bashнего есть несколько возможных мест для .profileсценария, и он выполнит первый найденный - . fileтаких автоматических откатов нет, поэтому вам нужно проверить, где вы profileнаходитесь, если вы хотите это сделать)