SSHing通过一个命令从我的本地机器依次进入几个主机



我目前正在尝试将一个涉及SSHing的别名从本地机器写入一台主机,然后在最后一台机器中SSH。我的击球技术没有达到标准,我似乎不知道发生了什么。

这是我的

ssh -A my_user@host_1 -t "get_ip | sed -n 2p | xargs -I {} ssh -T my_user@{}"

最终,我想做的是从我的本地机器运行一个命令:

  1. SS让我进入初始远程机器。在这里,我想运行get_ip并解析它的输出,这给了我一个ip
  2. 第一步中的IP是我想要SSH进入并运行活动会话(不想只是退出(的最终服务器。这就是我在命令的最后一部分所要做的

换句话说:

在本地机器上运行命令->在第一台远程服务器上运行命令,并使用该命令的输出获取下一台机器的ip->使用检索到的ip将SSH连接到最后一台机器->将最后一台计算机的SSHed连接到

现在我当前的命令正在返回:

Connection to host_1 closed

设置管道将替换stdin(因此输入来自现在为空的管道,而不是来自原始终端(。使用命令替换而不是xargs,并使用-tt强制在每个阶段分配一个TTY:

ssh -ttA my_user@host_1 'ssh -tt "my_user@$(get_ip | sed -n 2p)"'

更好:

sshWithCache() {
ssh 
-o "ControlPath $HOME/.ssh/control:%h:%p:%r" 
-o "ControlMaster auto" 
-o "ControlPersist 5m" 
"$@"
}
sshIndirectly() {
local ip
ip=$(sshWithCache my_user@host_1 'get_ip | sed -n 2p')
sshWithCache -o "ProxyJump my_user@host_1" "my_user@$ip" "$@"
}

之后您可以在host_2上运行sshIndirectly someCommand来调用someCommand。由于ControlPath/ControlMaster配置,因此只创建一个到host_1的实际SSH连接,并且只执行一次身份验证。

相关内容

最新更新