通过多个ssh连接和命令

时间:2018-11-05 14:50:20

标签: bash shell ssh automation alias

我的问题有点类似于所描述的here,但不一样除非它们是二进制文件,否则我不能在外部服务器S1 / S2 / S3上使用sudo(例如,安装软件包)

每天我都在本地登录到终端,然后运行:

  1. 在本地键入/运行初始化命令 C1
  2. 使用 alias1 (来自.bashrc 本地)通过ssh
  3. 连接到服务器 S1
  4. 使用 alias2 (来自 S1 中的.bashrc)从 S1 连接到服务器 S2
  5. 使用 alias3 (...)
  6. S2 连接到服务器 S3 S3
  7. 中键入/运行初始化命令 C2
  8. S3 中运行“ byobu”,然后在byobu中进行正常工作。

我想要一个脚本,该脚本执行所有这些步骤,并使终端保持打开状态,因为我觉得这很愚蠢,每天都要键入所有这些命令,但不知道如何更改:)< / p>

我的尝试:

#!/bin/bash
ssh -C2qtnN -D1001 S1 & #C1 which is tunel for the browser
ssh S1
ssh S2 # here it fails, trying to execute "ssh S2" locally
ssh S3 # same as above
C2 # initialization command that has to be run before byobu on S3
byobu #this one wont work either - to open byobu ;S

1 个答案:

答案 0 :(得分:0)

我找到了可行的解决方案:

脚本 ssh_teleport.sh 如下所示:

#!/bin/bash
ssh -C2qtnN -D1001 S1 &                                                                                                                                                          
echo "tunnel ready!"                                                                                                                                                                                       
ssh -tt $1 'bash -l -c "C2"'

其中{strong> $ 1可以是{S1,S2,S3}中的任何主机 C2是一个完整的命令(不幸的是,别名却无法使用),可以在$ 1中给出的ssh上运行

为了跳转(感谢@chepner),我不得不在本地计算机上修改.ssh中的配置,其描述方式为here

Host S1
    HostName IP_of_S1
    User MyUsername1

Host S2
    HostName someHostname1
    User MyUsername2
    ProxyJump S1

Host S3
    HostName someHostname2
    ProxyJump S2
    User MyUsername3

最后一步是为.bashrc添加一个别名

alias teleportS3='./scripts/ssh_teleport.sh S3'

它达到了目的!