我在管理工作期间需要登录多个远程 ssh 服务器。我在客户端使用三台不同的计算机,它们都是 Debian GNU/Linux 系统。我保留一个工作区目录,将工作所需的所有东西都放在其中,该目录包含一个bashrc
文件和一个ssh_config
文件等。
当我移动并开始使用不同的客户端时,我会手动将该目录内容与从一台客户端计算机使用的脚本rsync
同步到其他客户端计算机。
三个客户端上的本地用户只需要最少的配置,这样如果我需要创建一个新的本地用户或重新安装客户端,我只需要进入工作区并在真实用户中rsync
添加对我的自定义的引用。我的自定义创建了几个别名,无论我使用哪个客户端,我都会得到我通常的环境。workspace/bashrc
$HOME/.bashrc
workspace/bashrc
我的自定义workspace/bashrc
创建别名以这种方式连接到远程服务器:
alias s1='ssh -F ~/workspace/etc/ssh_config server1.example.com'
s1
我只需在任何客户端的终端上输入即可登录到服务器 1 ,因为我的自定义ssh_config
设置了所需的公钥认证选项、服务器 1 正在监听的正确端口和正确的用户。
现在,只要命令ssh
是我需要的,它就会像魔法一样工作。不幸的是,一旦我需要另一个命令,而该命令又使用ssh
,事情就会变得更加混乱。
例如,如果我需要rsync
对其中一个服务器进行任何操作,我就必须编写整个 ssh 命令:
rsync -Pavz --delete -e "ssh -F $HOME/workspace/etc/ssh_config" ...
类似的事情也会发生在其他命令中,例如scp
,ssh-copy-id
等等。
我希望能够写作
rsync -Pavz --delete -e "ssh" ...
相反,让 ssh 从环境变量中获取其配置文件名,这样我就可以在我的环境中设置该环境变量,bashrc
并且每次ssh
调用都会自动工作。
是否存在这样的环境变量或者是否有不同的解决方案?
答案1
这有点滥用整个概念,并将工具扭曲为特定用例。您应该按应有的方式使用这些工具。配置文件默认位于 中~/.ssh/config
。
为什么不在这三台计算机上创建一个符号链接,
~/workspace/etc/ssh_config
让它开箱即用,而无需做那么多工作?从 OpenSSH 7.3 开始,您可以使用
Include
指令来实现没有符号链接的相同功能(因此,如果需要,您也可以在某些主机上进行不同的配置)。可以使用相同的技巧对系统范围的配置进行配置
/etc/ssh/ssh_config
。
正如你已经拥有的...添加对我的自定义 bashrc 的引用...您还可以将一些修改放在一起并将它们.ssh/config
放在您的一些脚本中workspace
。