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

Как использовать собственный файл .bashrc при входе в систему по SSH

Я обнаружил, что в новой компании, с которой я работаю, мне часто приходится обращаться к серверам Linux с относительно коротким сроком службы. На каждом из этих серверов у меня есть учетная запись, но всякий раз, когда создается новая, мне приходится сталкиваться с трудностями при переносе через мой .bashrc. Однако возможно, что примерно через месяц этого сервера больше не будет. Я также должен получить доступ ко многим другим серверам в течение коротких периодов времени (минут), когда просто не стоит передавать через мой .bashrc, но поскольку я работаю на большом количестве серверов, это приводит к потере большого количества времени.

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

Если это возможно, было бы неплохо, если бы я мог сделать то же самое с другими файлами конфигурации, такими как файлы gitconfig.

Я думаю, что 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. Для более продвинутой конфигурации продолжайте чтение.

Я думаю, что вы хотите (в вашем .ssh / config на машине, с которой вы подключаетесь):

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

тогда вы можете начать с:

source .bashrc

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

Я также хотел бы убедиться, что sshds на серверах настроен с PermitLocalCommand yes

Есть много способов настроить эту LocalCommand, чтобы она работала в вашей конкретной среде - например, вы можете выполнить скручивание с внутреннего веб-сервера или извлечь из монтирования nfs.

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

Вы можете выполнить поиск данного известного хоста с помощью «ssh-keygen -F», но вам придется протестировать этот вывод (grep), поскольку ssh-keygen не возвращает false в случае промаха. Обратите внимание: если вы обращаетесь к узлу с помощью разных идентификаторов (IP-адрес, имя узла, полное доменное имя), каждый из них рассматривается как отдельные экземпляры.

Вы можете написать оболочку для ssh, которая передает вашу пользовательскую среду на этот хост при первом входе в систему:

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

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

Я не знаю, есть ли для каждого сеанса .bashrc.

Другое решение - написать небольшой скрипт, который переносит все ваши любимые конфигурации в вашу новую домашнюю папку.

Может просто сделать папку со всеми своими конфигами с путями и просто перенести их с помощью scp

лайк

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

а затем

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

Это экономит время.

Я не думаю, что это возможно, учитывая, что ssh не имеет ничего общего с вашим .bashrc. Этот файл загружает оболочка, а не ssh.

Некоторые идеи:

  1. Настройте удаленный домашний каталог при первом входе в систему.
  2. Используйте NFS для монтирования вашего домашнего каталога, содержащего ваш .bashrc, на каждом сервере. Таким образом, у вас везде будут одни и те же настройки.
  3. Если вас устраивает только несколько переменных среды, передаваемых на удаленные серверы, вам следует проверить SendEnv вариант (см. ssh_config справочную страницу для получения дополнительной информации). Если сервер настроен правильно (т.е. имеет соответствующий AcceptEnv в sshd_config) вы можете использовать SendEnv чтобы скопировать переменные среды на удаленный хост.
  4. Я не знаю, работает ли это, но, возможно, вы можете неправильно использовать ProxyCommand установка (см. ssh_config страницу руководства), чтобы отправить свой .bashrc или другие файлы перед подключением к удаленному хосту. Однако это потребует некоторого тестирования. Также будьте готовы к тому, что это может помешать scp.

я так думаю 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