如何通过ssh以批处理模式运行命令?


9

如何通过ssh以批处理模式运行命令?也就是说,该ssh命令的等效项是sftp -b <filename> <hostname>什么?

我有一组命令,它们希望跨连接的一组主机运行ssh。在上方sftp,我将命令存储在文件中,filename并连接到主机,然后使用前面提到的命令运行命令。

这样的事情可能结束ssh吗?


我已经解决了这个问题。但是我仍然不知道如何以批处理模式运行命令。
Srikanth

有人可以创建一个标签#batchmode并将这个问题标记为吗?
Srikanth

Answers:


9

如果我错了,请纠正我,但是您似乎想在脚本位于本地的远程服务器上运行常规的shell命令。

#!/bin/sh
trap "rm -f /tmp/sendonssh.$$.*" 0 1 2 3 15
# commands to run on the remote server
cat <<'EOF' >> /tmp/sendonssh.$$.sh
mkdir -p /tmp/foobar.$$
mv $HOME/xyzzy /tmp/foobar.$$
chmod 640 $HOME/xyzzy
EOF
# call for each argument
for userhost in "$@"; do
    errorout=`ssh -aTxo BatchMode=yes $userhost /bin/sh -s < /tmp/sendonssh.$$.sh 2>&1`
    rc=$?
    if [ $rc -ne 0 ]; then
        echo "Error: $userhost: $errorout"
        exit $rc
    fi
done

我在测试环境中使用Python(而不是shell)使用一些“远程执行”应用程序来执行此操作ssh $userhost python < $pythonscriptfilename


感谢您的回答。看起来像这样。我要稍微调整一下,然后尝试一下。
Srikanth

7

相当于SSH的sftp -b <filename> <hostname>是:

ssh -o BatchMode=yes <hostname> sh -s < "<filename>"


3

如何保持简单并在另一台计算机上运行“批处理”文件?

  1. scp批处理文件user @ pc
  2. ssh user @ pc批处理文件
  3. ssh user @ pc rm批处理文件

批处理文件将是普通的shell脚本,因此语法是众所周知的。




0

您可以使用ssh强制命令。

这些与特定的密钥相关联。使用该密钥完成身份验证后,将运行该命令并退出连接。这种方法的一个优点是提高了安全性,因为在这种情况下,密钥不能用于访问登录外壳。


0

Arcege脚本的另一个选项是Bash函数:

sshbatch() {
  # Expect at least 2 parameters, if less are provided print help
  if [[ ${#@} -lt 2 ]]; then
    printf 'Usage: sshbatch [user@]host... input_file\n'
  else
    while read -r -u "$fd" host; do
      # Check if the last parameter is a readable file, else print error and exit
      [[ -r ${@:(-1)} ]] || { printf "The file ${@:(-1)} is not readable!\n"; break; }
      # Run remote bash from the file given in the last parameter
      ssh -o BatchMode=yes "$host" bash -s < "${@:(-1)}"
      # Read host list from 1st to next to last parameters
    done {fd}< <(printf '%s\n' "${@:1:${#@}-1}")
  fi
}

我不使用ssh的-T选项,因为它不适用于所有情况。

该脚本在位置参数数组上使用参数扩展$@

  • "${@:(-1)}" 扩展到最后一个参数(从字面上第一个开始)
  • "${#@}" 扩展到位置参数的数量
  • "${@:1:${#@}-1}" 扩展到所有参数的列表,从第一个到最后一个(从字面上看,参数数量减去一个)。

我对像这样的变量扩展不太满意,您能对正在发生的事情添加一点吗?干杯。
盖伊

@Guy,您来了-我注释了代码,并添加了一些有关参数扩展的说明
gadamiak
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.