Назад | Перейти на главную страницу

использование локального LS_COLORS на удаленном сервере через ssh без изменения удаленного сервера

У меня есть доступ к множеству разных учетных записей 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, вызывая задержку), любое более чистое решение очень приветствуется! :)