在我的pipe理员工作期间,我需要login到几个远程的ssh服务器。 我与三个不同的计算机客户端工作,所有这些都是Debian GNU / Linux系统。 我保留一个工作空间目录,我把我需要做的所有工作都放在这个目录下,该目录包含一个bashrc文件和一个ssh_config文件。
我手动同步该目录内容与脚本,使用rsync从一台客户端计算机到其他客户端,因为我移动并开始使用不同的客户端。
三个客户端上的本地用户都需要最less的configuration,所以如果我需要创build一个新的本地用户或重新安装一个客户端,我只需要rsync工作空间,并添加一个引用到我的自定义workspace/bashrc在真实用户的$HOME/.bashrc 。 我的自定义workspace/bashrc创build了几个别名,我得到我平常的环境,无论我使用的客户端。
我的自定义workspace/bashrc创build别名以这种方式连接到远程服务器:
alias s1='ssh -F ~/workspace/etc/ssh_config server1.example.com'
我只需在任何客户端的terminal中键入s1loginserver1,因为我的自定义ssh_config设置了所需的公钥authentication选项,正确的端口server1正在侦听并且正确的用户。
现在这就像一个魅力,只要ssh命令是我所需要的。 不幸的是,一旦我需要另外一个使用ssh命令,事情变得更加混乱。
例如,如果我需要rsync什么东西到其中一台服务器,我不得不写下整个ssh命令:
rsync -Pavz --delete -e "ssh -F $HOME/workspace/etc/ssh_config" ...
其他命令(如scp , ssh-copy-id等) scp发生类似的情况。
我希望能写
rsync -Pavz --delete -e "ssh" ...
而是让ssh从环境variables中取出它的configuration文件名,这样我就可以在我的bashrc设置这个环境variables,并且每个ssh调用都能自动工作。
有这样的环境variables还是有不同的解决scheme?
这是对整个概念的误用,并将工具扭曲到您的特定用例。 你应该使用这些工具。 configuration文件默认在~/.ssh/config 。
为什么不在这三台计算机上创build一个符号链接到你的~/workspace/etc/ssh_config ,以使它在没有所有这些工作的情况下运行?
自OpenSSH 7.3以来,您可以使用Include指令来实现相同的function(如果您需要,也可以在某些主机上configuration不同的configuration)。
使用/etc/ssh/ssh_config系统configuration也可以完成同样的技巧。
正如你已经有…添加一个引用到我的自定义bashrc …你可以放在一起修改.ssh/config在你的workspace一些脚本。