У меня есть доступ к множеству разных учетных записей ssh, несколько сотен, которые я использую в разных случаях. Некоторые из них являются личными, некоторые из них я получил от клиентов и ими поделился, а многие из них - временные. Создано для одноразового использования, через некоторое время будет автоматически удалено.
Теперь моя проблема в том, что я использую два .dircolors, один светлый и один темный. Мне очень нравится эта настройка, но это означает копирование нового .dircolors каждый раз, когда я использую ssh на сервере, и в общих учетных записях, иногда раздражающих других людей. Я попытался изменить свой ssh-скрипт, чтобы позволить мне использовать мой локальный LS_COLORS, но у меня возникли проблемы.
Если я использую: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash --noprofile --norc'
Он работает, но не совсем пригоден для использования, поскольку игнорирует всю информацию о системе по умолчанию.
Если я использую: ssh -t vps2 'export LS_COLORS="'$LS_COLORS'"; exec /bin/bash'
Это не работает, поскольку bash проходит через .profile и загружает другой LS_COLORS.
Любые предложения о том, как я могу загрузить .bash_profile / .bashrc по умолчанию И иметь свои собственные LS_COLORS?
Создайте файл, скажем «prefs.rc», с любой инициализацией, которая вам нравится.
$ scp prefs.rc vps2:/tmp/ && ssh vps2
# ssh banner
$ . /tmp/prefs.rc && rm /tmp/prefs.rc
Я бы, вероятно, добавил несколько проверок, чтобы убедиться, что удаленный файл действительно принадлежит мне и не содержит троянских программ. Лучше ошибиться на стороне паранойи.
В качестве альтернативы можно запустить prefs.rc с последовательности
. /etc/profile
. ~/.bash_profile
exec LSCOLORS=...
Использовать scp
передать, а затем:
ssh -t vps2 'exec bash --rcfile /tmp/prefs.rc'
В конечном итоге вам может потребоваться скопировать все содержимое .bash_profile и просто заменить LS_COLORS=...
линия.
ssh -t vps2 '
cp ~/.bashrc ~/.bashrc.n &>/dev/null ;
echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ;
echo "export LS_COLORS" >> ~/.bashrc.n ;
echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ;
exec bash --rcfile ~/.bashrc.n'
Это будет работать, не требуя сначала дополнительного scp, дополнительной задержки подключения здесь не должно быть. Вам не понадобится никаких дополнительных команд во время входа в систему, и он будет использовать существующую настройку оболочки, за исключением моих переопределений. Это не нарушит изменение размера терминала, как ожидалось :)
На самом деле я также добавил PS1 и псевдоним для grep / egrep с цветами, но для удобства чтения приведенный выше пример кода этого не добавляет.
Это работает (на стороне клиента, без каких-либо изменений сервера): expect -c 'spawn ssh vps2
expect "~#"
send "export LS_COLORS=\"no=00:fi=00:ETC_ETC_ETC_ETC:\"\r"
interact'
Это, конечно, довольно далеко от оптимального (поскольку он "набирает" команду экспорта после ssh, вызывая задержку), любое более чистое решение очень приветствуется! :)