我正在编写一个脚本,其中包含需要在远程服务器上运行的几组命令,并在两者之间进行结果处理。当前,这是通过ssh为每组命令运行来实现的,但是,这每次都需要进行新连接的建立和身份验证,这很慢。
我最近阅读了有关ControlMasterSSH中的选项的信息,这似乎正是我所需要的,即能够通过单个SSH连接运行单独的SSH会话。
但是,我非常不清楚的是我将如何在shell脚本中实现这一目标。例如,我正在考虑像这样构造它:
#!/bin/sh
HOST="$1"
# Make sure we clean up after ourselves
on_complete() {
kill $ssh_control_master_id
rm -r "$tmp_dir"
}
trap 'on_complete 2> /dev/null' SIGINT SIGHUP SIGTERM EXIT
tmp_dir=$(mktemp -d "/tmp/$(basename "$0").XXXXXX")
ssh_control_socket="$tmp_dir/ssh_control_socket"
# Setup control master
ssh -o 'ControlMaster=yes' -S "$ssh_control_socket" "$HOST" &
ssh_control_master_id=$!
# Run initial commands
data=$(ssh -S "$ssh_control_socket" "$HOST" 'echo "Foo"')
# Process the data
echo "$data"
# Run some more commands
data=$(ssh -S "$ssh_control_socket" "$HOST" 'echo "Bar"')
# Process the …Run Code Online (Sandbox Code Playgroud)