我发现在与我合作的新公司中,我经常不得不访问生命周期相对较短的 linux 服务器。在这些服务器中的每一个上,我都有一个帐户,但每当创建一个新帐户时,我都必须经历通过我的 .bashrc 进行传输的麻烦。然而,有可能在大约一个月的时间内该服务器将不再存在。我还必须在短时间内(几分钟)访问许多其他服务器,在这些服务器上传输我的 .bashrc 是不值得的,但由于我在很多服务器上工作,这加起来浪费了很多时间。
我不想更改服务器上的任何内容,但我想知道是否有一种方法可以拥有“每个连接”.bashrc,因此每当我通过 SSH 连接到服务器时,我的设置都会用于该会话。
如果可能的话,如果我可以对其他配置文件(如 gitconfig 文件)执行相同的操作,那就太好了。
我认为 sshrc 是你要找的: https ://github.com/Russell91/sshrc
您可以使用它来设置环境变量、定义函数和运行登录后命令。就是这么简单,而且不会影响服务器上的其他用户——即使他们也使用 sshrc。如需更高级的配置,请继续阅读。
我想你想要的是(在你连接的机器上的 .ssh/config 中):
然后你可以开始:
并在你快乐的路上。LocalCommand 会在您连接到的服务器上执行命令,就在您实际会话之前。
我还要确保服务器上的 sshds 配置了
PermitLocalCommand yes
有很多方法可以调整 LocalCommand 以使其在您的特定环境中工作——例如,您可以从内部 Web 服务器卷曲,或者从 nfs 挂载中拉取。
如果您以前从未访问过服务器,则 ~/.ssh/known_hosts 中不会有它的条目。
您可以使用“ssh-keygen -F ”搜索给定的已知主机,但您必须测试该输出 (grep),因为 ssh-keygen 不会因未命中而返回 false。请注意,如果您通过不同的标识符(IP 地址、主机名、FQDN)引用主机,则这些标识符均被视为单独的实例。
您可以为 ssh 编写一个包装器,在第一次登录时将您的用户环境传输到该主机:
ssh-newenv () { 如果!ssh-keygen -F $1 | grep -q "^# 找到主机 $1:"; 然后 rsync ~/.bashrc ~/.bash_profile ~/.bash_logout $1:.; 菲; ssh $1;}
如果你想让它更健壮,你可以检查远程主机上是否存在已知的环境文件、散列或其他标记。
我认为https://github.com/fsquillace/kyrat(以前称为 Pearl-ssh)可以满足您的需求。
我在 sshrc 诞生之前很久就写了它,它与 sshrc 相比有更多的好处:
例如:
我不知道每个会话是否有 .bashrc 。
另一种解决方案是编写一个小脚本,将所有您喜欢的配置传输到您的新主文件夹。
也许只是用你所有的配置和路径创建文件夹,然后用 scp 传输它们
喜欢
然后一个
这样可以节省时间。
我认为这是不可能的,因为 ssh 与您的
.bashrc
. 加载该文件的是 shell,而不是 ssh。一些想法:
SendEnv
选项(ssh_config
有关更多信息,请参见手册页)。如果服务器设置正确(即它AcceptEnv
在 sshd_config 中有足够的设置),您可以使用SendEnv
将环境变量复制到远程主机。ProxyCommand
设置(参见ssh_config
手册页)来发送您的文件或其他文件。.bashrc
不过,这需要进行一些测试。另外,请准备好这可能会干扰 scp。