Я відповідаю собі, як нарешті відкрив секрет. Ні -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
зробити все важким підйомом.
І якщо це дійсно необхідно, насправді досить просто змусити 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
якщо ви хочете це зробити)