ssh 命令出现问题 - 传递了错误的参数

ssh 命令出现问题 - 传递了错误的参数

我想使用 ssh 在远程服务器上执行一堆命令,并希望提供获取服务器名称和其他信息作为参数的灵活性。控制台上打印的命令有效,但作为 shell 脚本执行时无效。到目前为止,我已经设法使用 bash 手册页和研究各种站点构建了脚本。

#!/bin/bash

SERVER=
USER=()
KEYFILE=()
PORT=()

while getopts ":s:u:k:p:" opt; do
      case ${opt} in
          s ) SERVER=$OPTARG ;;
          u ) USER=($OPTARG "@") ;;
          k ) KEYFILE=("-i" "$OPTARG" ) ;;
          p ) echo $OPTARG &&  PORT=("-p" "$OPTARG") ;; 
          \: )
              echo "Missing argument for option $OPTARG" 1>&2
              exit 1
              ;;
          \? )
              echo "Invalid Option: -$OPTARG" 1>&2
              exit 1
              ;;
          *  ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
      esac
done

USER=(${USER[@]} $SERVER)
printf -v userIdPattern '%s' "${USER[@]}"

declare ssh_cmd=("/usr/bin/ssh" "${PORT[@]}" "${KEYFILE[@]}" "$userIdPattern"  )
echo "Ssh command ${ssh_cmd[@]}"

declare ls_cmd=("${ssh_cmd[@]}" "ls -al")
echo "ls command ${ls_cmd[@]}"
$("${ls_cmd[@]}" )

当执行如下操作时

./generalSetup.sh -s app4 -u me

我得到了回复

./generalSetup.sh:第 35 行:总计:未找到命令

消息表明 ssh 命令正在尝试执行 ls 命令的输出,但不确定如何将不同的命令作为数组传递。

最终目标是将其提取为一个函数并在目标服务器上执行一组命令。

我究竟做错了什么?

相关内容