Возможно ли, чтобы сеанс SSH использовал все ваши локальные файлы конфигурации (.bash_profile, .vimrc и т. д.) при входе в систему? Таким образом, у вас будет такая же конфигурация, скажем, для редактирования файлов в vim в удаленном сеансе.
Использование локальных настроек через SSH
Ответы (10)
Нет, потому что это не SSH, использующий ваши файлы конфигурации, а удаленная оболочка.
Я предлагаю хранить ваши файлы конфигурации в Subversion или какой-либо другой системе контроля версий. Вот как я это делаю.
Я только что наткнулся на две альтернативы простому выполнению git clone
ваших точечных файлов. Я не беру кредит ни на один из них и не могу сказать, что использовал их экстенсивно, поэтому я не знаю, есть ли подводные камни в любом из них.
sshrc
sshrc — это инструмент (на самом деле просто большая функция bash), который копирует локальные rc-файлы без постоянного запись их в $HOME
удаляемого пользователя - идея в том, что это может быть общая учетная запись администратора, которую используют другие люди. Похоже, что его также можно настроить для разных удаленных хостов.
.ssh/config и LocalCommand
В этом сообщении блога предлагается способ автоматического запуска команды при входе в систему. на удаленный хост. Он архивирует и направляет набор файлов на удаленный компьютер, а затем распаковывает их на удаленном $HOME:
Ваш локальный ~/.ssh/config
будет выглядеть так:
Host *
PermitLocalCommand yes
LocalCommand tar c -C${HOME} .bashrc .bash_profile .exports .aliases .inputrc .vimrc .screenrc \
| ssh -o PermitLocalCommand=no %n "tar mx -C${HOME}"
Вы можете изменить приведенное выше, чтобы запускать команду только на определенных хостах (вместо подстановочного знака *
) или настроить для разных хостов. С этим методом может быть достаточное количество дублирования на хост, хотя, возможно, вы могли бы упаковать весь tar c ... | ssh .. "tar mx .."
в скрипт.
Обратите внимание, что вышеприведенное выглядит так, как будто при подключении одни и те же файлы на удаленном компьютере удаляются, поэтому используйте его с осторожностью.
LocalCommand tar cz -C${HOME} .vimrc | ssh -o PermitLocalCommand=no %r@%n "tar mzx -C${HOME}"
, но всегда получаю tar /Users/lony не может выполнить: Файл или каталог не найден, я что-то пропустил?
- person lony; 28.10.2016
HOME
. Я заменил HOME
фактическим путем, потому что мой локальный домашний каталог отличается от удаленного. Мое решение: LocalCommand tar c -C /Users/username .vimrc | ssh -o PermitLocalCommand=no %n "tar mx -C /home/username"
- person Ben; 19.11.2016
Используйте репозиторий dotfiles.git
Что я делаю, так это храню все свои файлы конфигурации в dotfiles.git на центральном сервере.
Вы можете настроить его так, чтобы при подключении по ssh к удаленному компьютеру вы автоматически загружали последнюю версию dotfiles. Я делаю что-то вроде этого:
ssh myhost
cd ~/dotfiles
git pull --rebase
cd ~
ln -sf dotfiles/$username/linux/.* .
Примечание:
Чтобы поместить это в сценарий оболочки, вы можете автоматизировать процесс выполнения команд на удаленной машине с помощью конвейера к сш.
«$username» предназначен для того, чтобы вы могли делиться своими конфигурационными файлами с другими людьми, с которыми вы работаете.
«ln -sf» создает символические ссылки на все ваши dot-файлы, перезаписывая любые локальные, так что ~/.emacs связан с файлом с контролируемой версией ~/dotfiles/$username/.emacs.
Использование подкаталога «linux» предназначено только для того, чтобы разрешить изменения конфигурации на разных платформах. У меня также есть каталог Mac в dotfiles/$username/mac. Большинство файлов в каталоге /mac связаны символическими ссылками из каталога linux, поскольку они очень похожи, но есть некоторые исключения.
Наконец, обратите внимание, что вы можете сделать это еще более сложным с помощью имен хостов и тому подобного, а не просто общего «linux». С помощью dotfiles.git вы также можете совершать набеги на dotfiles ваших друзей, и это здорово — у каждого есть свой набор маленьких хитростей и лайфхаков.
git clone
на новом удаленном хосте мне также нужно скопировать мои ключи git ssh. Я думаю, что использование переадресация ssh-агента может помочь облегчить это, но пока еще один шаг.
- person thom_nic; 15.03.2017
Ну, нет, потому что, как говорит Энди Лестер, работу выполняет удаленная машина, и у нее нет доступа к вашей локальной машине для получения .vimrc...
С другой стороны, вы можете использовать sshfs для монтирования удаленной файловой системы. локально и редактировать файлы локально. Это не требует установки чего-либо на удаленной машине. Не уверен, насколько это эффективно, возможно, не подходит для редактирования больших файлов по медленным ссылкам.
Или в Komodo IDE есть удобная опция «Открыть >> Удаленный файл», которая позволяет редактировать файлы на удаленных машинах, автоматически перебирая их туда и обратно.
Я делаю такие вещи каждый день. У меня есть около 15 bash
rc-файлов и .vimrc
, несколько vim
скриптов плагинов, .screenrc
и несколько других rc-файлов. У меня есть сценарий синхронизации (написанный на bash
), который использует классную команду rsync
для синхронизации всех этих файлов с удаленными серверами. Каждый раз, когда я обновляю некоторые файлы на своем основном сервере, я вызываю скрипт для их синхронизации с удаленными серверами.
Настройка репозитория svn/git/hg
на главном сервере также работает для меня, но мои удаленные серверы необходимо неоднократно переустанавливать для тестирования. Поэтому я считаю более удобным использовать rsync
.
Несколько лет назад я также использовал инструмент rdist
, который также может удовлетворять требованиям в большинстве случаев. Но теперь я предпочитаю rsync
, так как он поддерживает инкрементную синхронизацию, которая очень эффективна.
rsync
: rsync -c -L --files-from /root/to-be-rsynced root $host:$home
. rsync
имеет довольно много волшебных опций, и те, которые я использую, могут вам не подойти. :)
- person pynexj; 17.06.2013
ssh можно настроить для передачи определенных переменных среды на другую (удаленную сторону). А поскольку большинство оболочек проверяют некоторые переменные среды на предмет применения дополнительных настроек, вы можете взломать это, чтобы применить некоторые локальные настройки удаленно. Но это немного сложно, и большинство администраторов в любом случае отключают передачу переменных среды ssh в конфигурации sshd.
Вы всегда можете просто скопировать файлы на машину перед подключением по ssh:
#!/bin/bash
scp ~/.bash_profile ~/.vimrc user@host:
ssh user@host
Это работает лучше всего, если вы используете ключи для входа в систему, и никто другой не входит в систему как этот пользователь.
Вот простой скрипт bash, который я использовал для этой цели. Он синхронизирует некоторые папки, которые я хотел бы скопировать с помощью rsync
, а затем добавляет папку ~/bin
на удаленные машины .bashrc
, если ее там еще нет. Лучше всего, если вы скопировали свои ключи ssh на каждый сервер. Я использую этот подход вместо репозитория dotfiles, поскольку на многих серверах, к которым я подключаюсь, нет git.
Итак, чтобы использовать его, вы должны сделать что-то вроде этого:
./bin_sync_to_machine.sh server1
bin_sync_to_machine.sh
function show_help()
{
echo ""
echo "usage: SERVER {SERVER2 SERVER3 etc...}"
echo ""
exit
}
if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$1" ]
then
show_help
fi
# Sync ~/bin and some dot files to remote server using rsync
for SERVER in $*; do
rsync -avrz --progress ~/bin/ -e ssh $SERVER:~/bin
rsync -avrz --progress ~/.vim/ -e ssh $SERVER:~/.vim
rsync -avrz --progress ~/.vimrc -e ssh $SERVER:~/.vimrc
rsync -avrz --progress ~/.aliases $SERVER:~/.aliases
rsync -avrz --progress ~/.aliases $SERVER:~/.bash_aliases
# Ensure remote server has ~/bin in the path
ssh $SERVER '~/bin/path_add_to_path.sh'
done
path_add_to_path.sh
pathadd() {
if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
PATH="${PATH:+"$PATH:"}$1"
fi
}
# Add to current path if running in a shell
pathadd ~/bin
# Add to ~/.bashrc
if ! grep -q PATH:~/bin ~/.bashrc; then
echo "PATH=\$PATH:~/bin" >> ~/.bashrc
fi
if ! grep -q source ~/.aliases ~/.bashrc; then
echo "source ~/.aliases" >> ~/.bashrc
fi
Для этого я написал очень простой инструмент, который позволит вам переносить ваш файл .vimrc при каждом подключении по ssh, используя встроенные параметры конфигурации SSHd нестандартным способом.
Не требуется дополнительных svn
,scp
,copy/paste
и т. д.
Он простой, легкий и работает по умолчанию на всех конфигурациях серверов, которые я тестировал до сих пор.
https://github.com/gWOLF3/viSSHous
Я думаю, что https://github.com/fsquillace/kyrat делает то, что вам нужно.
Я написал его задолго до появления sshrc, и он имеет больше преимуществ по сравнению с sshrc:
- Не требует зависимостей от xxd для обоих хостов (которые могут быть недоступны на удаленном хосте).
- Кират использует более эффективный алгоритм кодирования
- Это всего ~20 строк кода (очень легко понять!)
- Нет необходимости в корневом доступе или каких-либо установках на удаленном хосте.
Например:
$> echo "alias q=exit" > ~/.config/kyrat/bashrc
$> kyrat [email protected]
myserver.com $> q
exit