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

21

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

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

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

gsingh2011
источник
Это не решение для каждого соединения, но вы все равно можете найти его ценным. Проверьте базу на GitHub. Более подробно в этом ответе на Super User community.
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будет выполнено на машине, с которой вы подключаетесь. Команды in не LocalCommandимеют доступа к сеансу ssh.
Оливер
@ Оливер Ты прав. Я согласился на автоматизацию получения .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. Для более сложной конфигурации, продолжайте читать.

RussellStewart
источник
Пожалуйста, прекратите рассылать спам только с ссылками. Вы можете добавлять комментарии (в любом случае, ваши сообщения, связанные с sshrc).
Охотник на оленей
3
Я работаю над их исправлением!
RussellStewart
Выполнено. В первый раз я соблазнился сделать короткий пост только для ссылок. Теперь я знаю лучше.
RussellStewart
1
Я написал давно (до sshrc) что-то похожее на sshrc: github.com/fsquillace/pearl-ssh. Оно более эффективное, маленькое и без xxd-зависимостей.
user967489
1

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

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

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

ssh-newenv () {если! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 found:"; затем rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; Fi; ssh $ 1; }

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

Доктор Эдвард Морбиус
источник
0

Я не знаю, есть ли за сеанс .bashrc.

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

Может быть, просто создайте папку со всеми вашими конфигами с путями и просто перенесите их с помощью scp

нравится

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

а затем

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

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

Кристофер Перрен
источник
0

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

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

  1. Настройте удаленный домашний каталог при первом входе в систему.
  2. Используйте NFS для монтирования вашего домашнего каталога, содержащего ваш .bashrc на каждом сервере. Таким образом, у вас везде одинаковые настройки.
  3. Если у вас все в порядке с некоторыми переменными среды, переданными на удаленные серверы, вы должны проверить эту SendEnvопцию (см. ssh_configСправочную страницу для получения дополнительной информации). Если сервер настроен правильно (т. Е. У него есть соответствующий параметр AcceptEnvв sshd_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
user967489
источник