如何在SSHlogin中使用自定义的.bashrc文件

我发现,与我正在合作的新公司,我经常需要访问寿命相对较短的Linux服务器。 在每台服务器上都有一个帐户,但是每当创build一个新帐户时,我都必须经历通过我的.bashrc传输的麻烦。 然而,在大约一个月的时间内,服务器将不再存在。 我也必须短时间访问许多其他服务器(分钟),但是由于我在很多服务器上工作,所以不值得通过我的.bashrc进行传输,这大大浪费了时间。

我不想改变服务器上的任何东西,但是我想知道是否有一个“per-connection”.bashrc的方法,所以无论何时我将SSH连接到服务器,我的设置都将用于该会话。

如果可能的话,如果我可以用其他configuration文件(如gitconfig文件)做同样的事情,那将会很好。

我想你想要什么(在你连接的机器上的.ssh / config中):

PermitLocalCommand yes LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc 

那么你可以带领:

 source .bashrc 

并在你的快乐方式。 LocalCommand在您连接到的服务器上执行命令时,在实际会话之前。

我也会确保服务器上的PermitLocalCommand yesconfiguration了PermitLocalCommand yes

有很多方法可以调整LocalCommand以使其在特定的环境中工作 – 例如,您可以从内部Web服务器卷动,或者从nfs挂载拉出。

我认为sshrc是你要找的: https : //github.com/Russell91/sshrc

sshrc和ssh一样工作,但是在远程login后也会发送〜/ .sshrc。

 $ echo "echo welcome" > ~/.sshrc $ sshrc me@myserver welcome $ echo "alias ..='cd ..'" > ~/.sshrc $ sshrc me@myserver $ type .. .. is aliased to `cd ..' 

您可以使用它来设置环境variables,定义函数,并运行login后命令。 这很简单,而且不会影响服务器上的其他用户 – 即使他们也使用sshrc。 要获得更高级的configuration,请继续阅读。

如果你以前从未打过服务器,那么在〜/ .ssh / known_hosts中就不会有这个入口了。

您可以使用“ssh-keygen -F”search给定的已知主机,但是您必须testing输出(grep),因为ssh-keygen在未命中时不会返回false。 请注意,如果您通过不同的标识符(IP地址,主机名,FQDN)引用主机,则将这些标识符视为单独的实例。

你可以写一个ssh的包装器,在第一次login时将你的用户环境转移到这个主机上:

ssh-newenv(){if! ssh-keygen -F $ 1 | grep -q“^#host $ 1 found:”; 那么rsync〜/ .bashrc〜/ .bash_profile〜/ .bash_logout $ 1:。 networking连接; ssh $ 1; }

如果您想使其更健壮,可以检查远程主机上是否存在已知的环境文件,散列或其他标记。

我不知道每个会话是否有.bashrc。

另一个解决scheme是编写一个小脚本,将所有您喜欢的configuration传输到您的新主文件夹。

也许只是用所有你的configuration与path的文件夹,只是用SCP传输它们

喜欢

 /home/foobar/configs/.bashrc /home/foobar/configs/.foo/bar.conf ... 

然后a

 scp -r /home/foobar/configs/* [email protected]:/home/foo/ 

这节省了时间。

我不认为这是可能的,因为ssh与你的.bashrc没有任何关系。 加载该文件的是shell,而不是ssh。

一些想法:

  1. 首次login时设置远程主目录。
  2. 使用NFS在每台服务器上安装包含.bashrc的主目录。 这样,你到处都有相同的设置。
  3. 如果您只需将一些环境variables传输到远程服务器,则应该检出SendEnv选项(有关更多信息,请参见ssh_config手册页)。 如果服务器设置正确(即在sshd_config中有足够的AcceptEnv ),则可以使用SendEnv将环境variables复制到远程主机。
  4. 我不知道这是否ProxyCommand ,但也许你可能会错误地使用ProxyCommand设置(参见ssh_config手册页)在连接到远程主机之前发送.bashrc或其他文件。 虽然这需要一些testing。 另外,准备好这可能会干扰scp。

我认为, https://github.com/fsquillace/pearl-ssh做你所需要的。

在sshrc诞生之前我就写了很久,和sshrc相比,它有更多的好处:

  • 它不需要依赖于xxd这两个主机(可以在远程主机上不可用)
  • Pearl-ssh使用更高效的编码algorithm
  • 这只是20行代码(真的很容易理解!)

例如:

 $> echo "alias q=exit" > ~/.config/pearl/sshrc $> ssh_pearl [email protected] myserver.com $> q exit