我发现,与我正在合作的新公司,我经常需要访问寿命相对较短的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 yes
configuration了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。
一些想法:
SendEnv
选项(有关更多信息,请参见ssh_config
手册页)。 如果服务器设置正确(即在sshd_config中有足够的AcceptEnv
),则可以使用SendEnv
将环境variables复制到远程主机。 ProxyCommand
,但也许你可能会错误地使用ProxyCommand
设置(参见ssh_config
手册页)在连接到远程主机之前发送.bashrc
或其他文件。 虽然这需要一些testing。 另外,准备好这可能会干扰scp。 我认为, https://github.com/fsquillace/pearl-ssh做你所需要的。
在sshrc诞生之前我就写了很久,和sshrc相比,它有更多的好处:
例如:
$> echo "alias q=exit" > ~/.config/pearl/sshrc $> ssh_pearl [email protected] myserver.com $> q exit