是否可以让SSH会话在登录时使用所有本地配置文件(.bash_profile,.vimrc等)?这样,您就可以在远程会话中编辑vim中的文件。
答案 0 :(得分:13)
我刚刚遇到了两个替代方法,只需执行一个git clone
的dotfiles。我不赞成其中任何一个,也不能说我已广泛使用,所以我不知道其中任何一个是否存在缺陷。
sshrc 是一种工具(实际上只是一个大型bash函数),可以复制本地rc文件,而无需将其永久性地写入删除用户$HOME
- 这个想法可能是其他人使用的共享管理员帐户。似乎也可以为不同的远程主机进行自定义。
LocalCommand
This blog post建议一种在登录远程主机时自动运行命令的方法。它会将一组文件转换并传输到遥控器,然后将它们取出来放在遥控器的$ 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 .."
打包到脚本中。
请注意,当您连接时,上面的内容似乎会破坏遥控器上的相同文件,因此请谨慎使用。
答案 1 :(得分:8)
我所做的是将所有配置文件保存在中央服务器上的dotfiles.git中。
您可以对其进行设置,以便在您进入远程计算机时自动提取最新版本的dotfiles。我做这样的事情:
ssh myhost
cd ~/dotfiles
git pull --rebase
cd ~
ln -sf dotfiles/$username/linux/.* .
注意:
要将其放入shell脚本中,您可以通过piping to ssh自动执行远程计算机上的命令执行过程。
“$ username”就在那里,您可以与您正在使用的其他人共享您的配置文件。
“ln -sf”创建所有dotfiles的符号链接,覆盖任何本地文件,以便〜/ .emacs链接到版本控制文件〜/ dotfiles / $ username / .emacs。
使用“linux”子目录只是为了允许跨平台进行配置更改。我在dotfiles / $ username / mac下也有一个mac目录。 / mac目录中的大多数文件都是从linux目录中符号链接的,因为它非常相似,但有一些例外。
最后,请注意,您可以使用主机名等更加复杂,而不仅仅是通用的“linux”。使用dotfiles.git,您还可以从朋友那里搜索dotfiles,这很棒 - 每个人都有自己的一套小技巧和黑客。
答案 2 :(得分:5)
不,因为它不是使用配置文件的SSH,而是远程shell。
我建议您将配置文件保存在Subversion或其他一些VCS中。 Here's how I do it
答案 3 :(得分:2)
嗯,不,因为正如 Andy Lester 所说的那样,远程机器就是那个正在做工作的机器,它无法访问你的本地机器来获取.vimrc ...
另一方面,您可以使用sshfs在本地安装远程文件系统并在本地编辑文件。这不需要您在远程计算机上安装任何东西。不确定它的效率如何,也许不适合通过慢速链接编辑大文件。
或者Komodo IDE有一个简洁的“打开>>远程文件”选项,可让您编辑远程文件 通过自动来回扫描机器。
答案 4 :(得分:2)
我每天都做这种事。我有大约15个bash
个rc文件和.vimrc
,一些vim
插件脚本,.screenrc
和其他一些rc文件。我有一个同步脚本(用bash
编写),它使用酷rsync
命令将所有这些文件同步到远程服务器。每次我更新主服务器上的某些文件时,我都会调用脚本将它们同步到远程服务器。
在主服务器上设置svn/git/hg
存储库也适用于我,但需要重复重新安装我的远程服务器以进行测试。所以我发现使用rsync
更方便。
几年前,我还使用了rdist
工具,它也可以满足大多数时间的要求。但现在我更喜欢rsync
,因为它支持增量同步,这非常有效。
答案 5 :(得分:1)
ssh可以配置为将某些环境变量传递给另一个(远程端)。并且由于大多数shell会检查一些环境变量以便应用其他设置,因此您可以将其破解为远程应用某些本地设置。但它有点复杂,大多数管理员无论如何都会关闭sshd配置中的ssh环境变量传递。
答案 6 :(得分:1)
在连接ssh:
之前,您始终可以将文件复制到本机#!/bin/bash
scp ~/.bash_profile ~/.vimrc user@host:
ssh user@host
如果您使用密钥登录而没有其他人以该用户身份登录,则效果最佳。
答案 7 :(得分:0)
我认为https://github.com/fsquillace/pearl-ssh可以满足您的需求。
我在sshrc诞生之前的很久以前写过它,与sshrc相比它有更多的好处:
例如:
$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
答案 8 :(得分:0)
这是我用于此目的的简单bash脚本。它同步我想要使用rsync
复制的一些文件夹,然后将~/bin
文件夹添加到远程计算机.bashrc
(如果它已经存在)。如果你有have copied your ssh keys to each server,它效果最好。我使用这种方法而不是" dotfiles repo"因为我连接的很多服务器都没有git。
所以要使用它,你可以这样做:
./bin_sync_to_machine.sh server1
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
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
答案 9 :(得分:0)
为此,我编写了一个非常简单的工具,通过使用非标准方式使用SSHd内置的配置选项,您可以在每次ssh时本地传输.vimrc文件。
不需要其他svn
,scp
,copy/paste
等。
它简单,轻巧,并且默认情况下可以在到目前为止我测试过的所有服务器配置上使用。