Як використовувати користувацький .bashrc файл для входу в SSH


21

Я виявив, що з новою компанією, з якою я працюю, мені часто доводиться отримувати доступ до linux-серверів порівняно коротко. На кожному з цих серверів у мене є обліковий запис, але щоразу, коли створюється новий, мені доведеться переживати проблеми з передачею через мій .bashrc. Цілком можливо, що приблизно через місяць цей сервер більше не буде. Мені також доводиться отримувати доступ до багатьох інших серверів за короткий проміжок часу (хвилин), де передавати через мій .bashrc просто не варто, але оскільки я працюю на багатьох серверах, це збільшує багато часу.

Я не хочу нічого змінювати на серверах, але мені було цікаво, чи є спосіб мати .bashrc "за з'єднання", тому щоразу, коли я ставлю SSH до сервера, для цього сеансу будуть використовуватися мої налаштування.

Якщо це можливо, було б непогано, якби я міг зробити те ж саме з іншими файлами конфігурації, як-от файли gitconfig.


Це не рішення для підключення, але ви все ще можете вважати його цінним. Ознайомтесь із базою на GitHub. Детальніше у цій відповіді у спільноті Super User.
codeforester

Відповіді:


6

Я думаю, що вам потрібно (у вашому .ssh / config на машині, з якої ви підключаєтеся):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

то ви можете вивести:

source .bashrc

і бути на своєму веселому шляху. LocalCommand виконує команду на сервері, до якого ви підключаєтесь, коли він потрапляє туди, безпосередньо перед вашим фактичним сеансом.

Я б також переконався, що sshds на серверах налаштовано з PermitLocalCommand yes

Існує багато способів налаштувати LocalCommand, щоб він працював у вашому конкретному середовищі - ви можете скрутитись із внутрішнього веб-сервера або, наприклад, витягнути з кріплення nfs.


Пару приміток. Перш за все, я думаю, що ви змінили порядок файлів у команді scp, оскільки я хочу перенести свій bash на сервер, і я думаю, що ви змінили його. По-друге, ви можете просто додати ; source /path/to/.bashrcпісля команди scp, щоб він автоматично з’явився. Нарешті, не дуже важливим мінусом цього методу є те, що я повинен вводити свій пароль двічі. Але врешті-решт спрацювало, тож спасибі.
gsingh2011

Вибач за це! Працював у мене в голові, так що шкода мішанки. Чи можете ви налаштувати безпарові налаштування ключів у вашому оточенні? У нас це є в нашому оточенні, і це прекрасна річ. Радий, що працював, хоча!
Квінн Мерфі

@ gsingh2011: Це source /path/to/.bashrcбуде виконано на машині, з якої ви підключаєтесь. Команди в LocalCommandне мають доступу до сеансу ssh.
Олівер

@Oliver Ви маєте рацію. Я вирішив автоматизувати пошук джерела .bashrc з віддаленого комп'ютера. Я повинен змінити кілька речей на стороні сервера під час першого входу, але це набагато зручніше, ніж те, що я мав робити раніше.
gsingh2011

16

Я думаю, що sshrc - це те, що ви шукаєте: https://github.com/Russell91/sshrc

sshrc працює так само, як ssh, але він також джерело ~ / .sshrc після віддаленого входу в систему.

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

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

Ви можете використовувати це для встановлення змінних середовища, визначення функцій та запуску команд після входу. Це так просто, і це не вплине на інших користувачів сервера - навіть якщо вони також використовують sshrc. Для більш досконалої конфігурації продовжуйте читати.


Будь ласка, припиніть спам із публікаціями, що містять лише посилання Ви чудово можете додавати коментарі (як це стосується ваших публікацій, що стосуються sshrc).
Мисливець на оленів

3
Я працюю над виправленням усіх!
RussellStewart

Зроблено. Перший раз я спокусився зайняти коротку посаду лише для посилань. Тепер я знаю краще.
RussellStewart

1
Я писав давно (до sshrc) подібний sshrc: github.com/fsquillace/pearl-ssh Це просто більш ефективно, мало і без xxd залежностей.
user967489

1

Якщо ви ніколи раніше не потрапляли на сервер, для нього не буде запису в ~ / .ssh / known_hosts.

Ви можете шукати даного відомого хоста за допомогою "ssh-keygen -F", але вам доведеться перевірити цей вихід (grep), оскільки ssh-keygen не поверне помилку для пропуску. Зауважте, що якщо ви посилаєтесь на хост за різними ідентифікаторами (IP-адреса, ім'я хоста, FQDN), вони розглядаються як окремі екземпляри.

Ви можете написати обгортку для ssh, яка передає ваше середовище користувача цьому хосту під час першого входу:

ssh-newenv () {якщо! ssh-keygen -F $ 1 | grep -q "^ # хост $ 1 знайдено:"; тоді rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh $ 1; }

Якщо ви хочете зробити це більш надійним, ви можете перевірити наявність відомого файлу середовища, хеша чи іншого маркера на віддаленому хості.


0

Я не знаю, чи є сеанс .bashrc.

Іншим рішенням буде написати невеликий сценарій, який передає всі ваші улюблені конфігурації у вашу нову домашню папку.

Можливо, просто зробіть папку з усіма своїми конфігураціями з контурами та просто перенесіть їх за допомогою scp

подібно до

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

а потім a

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Це економить час.


0

Я не думаю, що це можливо, враховуючи, що ssh не має нічого спільного з вашим .bashrc. Саме оболонка завантажує цей файл, а не ssh.

Деякі ідеї:

  1. Налаштуйте свій віддалений домашній каталог під час першого входу.
  2. Використовуйте NFS для монтажу домашнього каталогу, що містить .bashrc на кожному сервері. Таким чином, у вас всюди однакові налаштування.
  3. Якщо ви все в порядку з лише деякими змінними середовища, що передаються на віддалені сервери, вам слід ознайомитись із цим SendEnvпараметром ( ssh_configдля отримання додаткової інформації див. Сторінку man). Якщо сервер правильно налаштований (тобто він має відповідний AcceptEnvsshd_config), ви можете SendEnvскопіювати змінні середовища на віддалений хост.
  4. Я не знаю, чи це працює, але, можливо, ви можете неправильно використовувати ProxyCommandналаштування (див. ssh_configСторінку сторінки) для надсилання ваших .bashrcабо інших файлів до підключення до віддаленого хоста. Це вимагало б певного тестування. Також будьте готові, що це може заважати scp.

0

Я думаю, що https://github.com/fsquillace/pearl-ssh робить те, що потрібно.

Я писав це давно, перш ніж sshrc народився, і він має більше переваг порівняно з sshrc:

  • Він не вимагає залежностей від xxd для обох хостів (які можуть бути недоступними для віддаленого хоста)
  • Pearl-ssh використовує більш ефективний алгоритм кодування
  • Це просто ~ 20 рядків коду (насправді легко зрозуміти!)

Наприклад:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.