我经常使用 ssh 登录到远程服务器,执行标准的管理工作。我有本地 bashrc/vimrc 和各种其他配置文件,我希望可以远程访问它们。通常我只登录这些远程服务器一次,所以我不想在这些机器上留下我的配置文件的副本,其中一些机器位于客户站点上。
我确实考虑过做一些 hack 来让远程服务器安装 fusefs webDAV 或以其他方式在会话期间将远程文件系统安装到远程服务器。但是,如果远程系统没有必要的软件包或被防火墙关闭,这就会出问题。
有没有什么好的解决方案可以解决这个问题,这些解决方案是跨发行版兼容的,最新的 fedora/RHEL/ubuntu/debian/CentOS 不会干扰或减慢登录过程?
[编辑]
我想另一个考虑因素是,我可能会使用其他人的用户帐户登录,因此我不想对配置文件进行任何持久更改。理想情况下,我只会在会话中使用一些临时配置文件,然后在注销时丢弃它。这可能会进入月球上的领域 ;-)
答案1
您可以使用ssh -t
它来运行安装脚本,然后运行 shell,然后运行清理脚本。ssh -t
允许您运行命令,但仍在中间运行一个或多个 shell 并正确分配终端
你的安装脚本可以包括将临时主目录 wget/curl/scp 到类似的目录$HOME/tmphome
,然后运行如下脚本在那里启动 shell:
#!/bin/sh
HOME="$HOME/tmphome"
cd "$HOME"
bash --login
这应该可以很好地将您的 rc 文件隔离到 tmphome,并且 ssh -t 将跳过用户的 bashrc。只要您的环境是轻量级的,复制就不应该花费很长时间。
你的命令可能是这样的ssh -t user@host 'wget http://server/tmphome.tar.gz && tar -zxvf tmphome.tar.gz && rm tmphome.tar.gz && tmphome/shell.sh'
答案2
为什么不使用像 git 这样的分布式版本控制系统来存储配置文件?这就是我所做的,而且效果非常好。
答案3
许多“老派”unix管理员将他们的常用设置存储在cvs
存储库中。他们第一次登录新系统时,会使用cvs checkout
该存储库,并配置他们的设置.bashrc
以cvs update
获取当前设置,然后调用~/repo/bin/setup
(其中repo
是目标位置cvs checkout
,并且是将设置添加到其设置的setup
脚本等)。/repo/bin
$PATH
alias
此方法确实会将您的设置保留在系统上,尽管在很多情况下这可能不是什么大问题。
当然,您可以用svn
或git
代替cvs
。
答案4
看看“sshrc”程序... https://github.com/IngoHeimbach/sshrc/
这样,您就可以在启动系统上拥有一个脚本,该脚本可以作为目标计算机上的配置文件运行。它不会复制文件,而是将其以 base64 编码为 SSH 命令。
本质上它就像是……
ssh -t host "/bin/bash --rcfile <(base64 --decode <<<'$(base64 < script)' )"
我自己不使用“sshrc”,因为登录要求更复杂(中间有一个 ssh 跳转框),但我当前的 SSH 包装程序基于相同的原理来设置我的远程登录,而远程端没有任何永久文件。