如何在 Bash 脚本中 ssh 到另一台机器后调用一个函数?

如何在 Bash 脚本中 ssh 到另一台机器后调用一个函数?
function test1 {
    ssh -i identity file USER@SERVER1 << EOF
    sudo su
    command 1
    command 2
    command 3
    some_other_commands
    exit
EOF
}

function test2 {
    ssh -i identity file USER@SERVER2 << EOF
    sudo su
    command 1
    command 2
    command 3
    some_commands
    exit
EOF
}

function common {

    sudo su
    command 1
    command 2
    command 3
}

我希望通过调用和common来避免脚本重复。理想情况下,我希望这样test1test2

function test2 {
    ssh -i identity file USER@SERVER2 << EOF
    common
    some_commands
    exit
EOF
}

现在它无法被调用,因为它首先执行 ssh,并且common无法再从 SERVER2 访问。

解决这个问题的最佳方法是什么?有人可以指导我吗?

答案1

您可以尝试通过重定向到 ssh 来执行所需的内容cat yourscript。如果您希望在每台服务器上以不同的方式执行相同的脚本,请使用if条件。例如,您有下一个脚本:

$ cat sshcommands.sh 
#!/bin/bash

main () {
  if [ $(hostname) = 'pc' ]; then
    test1 
    echo "It claims to be PC......................."
  fi

  if [ $(hostname) = 'ubuntu' ]; then
    test2
    echo "It claims to be UBUNTU"
  fi
}

test1 () {
    echo "with common:"
    common
    hostname
    echo "This is pc"
}

test2 () {
    echo "without common"
    hostname
    echo "This is ubuntu"
}

common () {
    echo "Common start *******************"
    ls /
    lshw -C network
    echo "Common end   ********************"
}

main

您可以通过命令将其传递给您的 ssh 服务器:

cat ./sshcommands.sh | ssh user@your_server_IP

sudo在这种情况下,您可以看到如何使用这里.查看sshpass如下解决方案:

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

相关内容