如何在 ssh 连接到远程服务器时使用临时配置文件

如何在 ssh 连接到远程服务器时使用临时配置文件

我经常使用 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该存储库,并配置他们的设置.bashrccvs update获取当前设置,然后调用~/repo/bin/setup(其中repo是目标位置cvs checkout,并且是将设置添加到其设置的setup脚本等)。/repo/bin$PATHalias

此方法确实会将您的设置保留在系统上,尽管在很多情况下这可能不是什么大问题。

当然,您可以用svngit代替cvs

答案4

看看“sshrc”程序... https://github.com/IngoHeimbach/sshrc/

这样,您就可以在启动系统上拥有一个脚本,该脚本可以作为目标计算机上的配置文件运行。它不会复制文件,而是将其以 base64 编码为 SSH 命令。

本质上它就像是……

ssh -t host "/bin/bash --rcfile <(base64 --decode <<<'$(base64 < script)' )"

我自己不使用“sshrc”,因为登录要求更复杂(中间有一个 ssh 跳转框),但我当前的 SSH 包装程序基于相同的原理来设置我的远程登录,而远程端没有任何永久文件。

相关内容