在我的管理工作期间,我需要登录多个远程 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
我只需输入任何客户端的终端即可登录到 server1 ,因为我的自定义ssh_config
设置了所需的公钥身份验证选项、正确的端口 server1 正在侦听和正确的用户。
现在这就像一个魅力,只要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
调用中自动设置该环境变量。
是否有这样的环境变量或者有不同的解决方案?
这有点滥用整个概念并将工具扭曲到您的特定用例。您应该按应有的方式使用这些工具。配置文件默认在
~/.ssh/config
.为什么不在所有三台计算机上创建一个从那里到您的符号链接,
~/workspace/etc/ssh_config
以使其开箱即用而无需所有这些工作?从 OpenSSH 7.3 开始,您可以使用
Include
指令在没有符号链接的情况下实现相同的功能(因此,如果需要,您还可以在某些主机上进行不同的配置)。相同的技巧可以在
/etc/ssh/ssh_config
.正如您已经拥有的那样...添加对我的自定义 bashrc 的引用...您还可以
.ssh/config
在workspace
.