6

Мне нужно консоль на многих машинах через SSH. В том числе Linux, Mac, мобильные устройства, виртуальные машины. Иногда мне нужно войти в более чем 10 машин в один день.

Мне нравятся мои личные настройки .bashrc или .bash_profile, такие как приглашение (PS1), управление историей, псевдонимы и другие полезные настройки. Но сохранение этих настроек на многих машинах - не что иное, как боль.

Так что, если у кого-то есть идеи, как это автоматизировать? Лучше всего было бы «перенести» настройки со мной с моего «motherworld-PC».

6 ответов6

7

Вы можете использовать подход, описанный в https://serverfault.com/a/400782

Вы должны будете использовать PermitLocalCommand и LocalCommand для этого.

Я думаю, что решение в порядке, но мне не понравилось, так как оно заменит .bashrc удаленной машины, scp мой локальный .bashrc в удаленный .bashrc. Также я не мог заставить это работать точно так, как я ожидал.

Другое решение - использовать git для управления всеми вашими точечными файлами, как описано в

http://blog.smalleycreative.com/tutorials/using-git-and-github-to-manage-your-dotfiles/

Но большая проблема для меня заключается в том, что мне пришлось бы настраивать каждый сервер своими точечными файлами. Даже если бы у меня было время (и терпение) развернуть мои точечные файлы на каждом сервере, у меня все равно была бы одна проблема.

Представляя себе контекст, в котором более одного пользователя входят в систему на одном и том же сервере, используя один и тот же логин, было бы несправедливо менять настройки сервера по умолчанию на мои .

Затем...


Итак, я разработал собственное решение для этого, надеюсь, оно вам понравится и будет полезным:

Вам нужно будет:

  • Создайте (частную) суть на https://gist.github.com/ вашего .bashrc
    • Вам нужно будет войти на GitHub, чтобы создать гист
    • Обратите внимание на конфиденциальную информацию, такую как пароли в переменных окружения .bashrc. Во всяком случае, такая информация не должна быть в первую очередь.
    • Не берите имя, которое вы дали для файла суть. Я назову это GISTNAME. Выберите имя, которое вряд ли можно найти в удаленном каталоге. Не называйте это ".bashrc", пожалуйста. =) Хорошее имя будет mycustombashrc.sh
    • После сохранения списка найдите ссылку на его версию, нажав кнопку <> . Вам понадобится эта ссылка, необработанная ссылка или RAWGISTLINK

Затем в вашем локальном .bashrc поместите следующее в конце:

function customssh(){
  ssh $@ -t 'cd $HOME ; 
  wget --quiet -N "RAWGISTLINK" ;
  cp GISTNAME .'$USER'bashrc  ; 
  bash --rcfile $HOME/.'$USER'bashrc'

}

Не забудьте заменить GISTNAME и RAWGISTLINK

Теперь беги

source ~/.bashrc

А затем просто используйте customssh (у вас все равно будет обычный ssh)

customssh mylogin@remoteserver

Просто попробуйте один из ваших псевдонимов сейчас!

Заметки

  • Да, это, вероятно, загрузит файл gist при каждом входе в систему, но, поверьте мне, это ДЕЙСТВИТЕЛЬНО быстро. Не беспокойся
  • Чтобы обновить общий .bashrc
    • Перейдите по URL-адресу gist и внесите свои изменения (или скопируйте в него локальный .bashrc).
    • Затем обновите функцию customssh, заменив RAWGISTLINK новым RAWGISTLINK (ссылка на gist и GISTNAME совпадают, но необработанная ссылка на gist изменяется при внесении изменений в файл).
    • Теперь просто запустите source ~/.bashrc . Это оно! Не нужно ничего менять на своих удаленных серверах!
  • Мое решение полностью основано на Ubuntu, возможно, ему понадобятся некоторые настройки, чтобы оно работало с другими дистрибутивами
  • Вы, вероятно, можете использовать другие сервисы, такие как gist вместо github. Пастебин - один из примеров, но есть и другие. Это вполне возможно, но я еще не пробовал.
  • Также вы можете wget свой custombashrc.sh из других мест. Например, общедоступный веб-сервер.
  • Другой вариант, если ваша локальная машина видна в Интернете через ssh, вы можете просто scp файл с локального сервера (используя публичный адрес) на удаленный сервер. Я не использовал это решение, потому что трудно предположить, что ваша локальная машина не будет скрыта за маршрутизатором или брандмауэром (в моем случае я за маршрутизатором)
  • Может быть, вы можете найти проблемы в разных версиях Ubuntu, но я пока не мог их найти.

Лучшее в этом подходе - это то, что он ничего не меняет на удаленных серверах и без особых усилий на локальном компьютере, а с помощью gist вы получаете все удовольствие от вашего локального .bashrc на любом сервере, который вам нужен.

И вы все еще можете легко "отключить" это, используя ssh вместо customssh .

2

Одним из распространенных подходов к этому является помещение ваших файлов точек в github или другую систему контроля версий. Вы можете не только легко их обновлять, но и вести историю изменений, которые вы внесли, когда вам нужно что-то отменить.

Быстрый поиск в Google по "точечным файлам в github" и "точечным файлам в управлении версиями" дал мне пару страниц, которые выглядят полезными:

После настройки вы можете автоматизировать обновления с помощью cronjob на каждом сервере или просто добавить "git pull" в ваш .bash_profile.

1

Недавно я наткнулся на этот вопрос и решил добавить свой ответ о том, как я перенес свой файл .bashrc на несколько хостов.

В этом гипотетическом примере есть 18 серверов "vcn", которым нужен мой файл .bashrc. Если вам достаточно повезло иметь стандартное соглашение об именах, вы можете воспользоваться фигурными скобками в bash и использовать цикл для итерации имен серверов, добавляемых в числовой форме. Затем просто скопируйте в них локальный файл .bashrc.

for vcn in r1-vcn{1..9} r2-vcn{1..9}; do scp ~/.bashrc $vcn:/home/user/; done;
1

Вы можете использовать свой bashrc без необходимости загружать его или изменять что-либо на сервере, на котором вы находитесь, если вы делаете следующее. Файл скручивается в источник, то есть он существует только в памяти и только для этого сеанса.

source <(curl -s -A '' https://somedomain.com/bashrc);
1

Что-то вроде rsync , вероятно, подойдет вашим потребностям. Если это не вариант, используйте Dropbox, чтобы синхронизировать файлы на каждом устройстве и создать символическую ссылку между локально синхронизированным файлом и тем местом, где оно могло бы понадобиться.

1

Этот инструмент может оказаться полезным, хотя, возможно, Github - это то, что вам нужно, если это все ваши машины, а не общие машины:

sshrc работает так же, как ssh, но он также получает ~/.sshrc после удаленного входа в систему.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Вы можете использовать это для установки переменных среды, определения функций и запуска команд после входа в систему. Это так просто, и это не повлияет на других пользователей на сервере - даже если они тоже используют sshrc. Для более сложной конфигурации, продолжайте читать. https://github.com/Russell91/sshrc

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .