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
来避免脚本重复。理想情况下,我希望这样test1
test2
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