将 bash 脚本中的变量传递给 sshpass

Passing a variable in a bash script to sshpass

我正在尝试将 bash 脚本中的变量传递给 sshpass。这是我的代码供参考:

NAME="HARRY"
sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress 'bash -s' << 'EOF'
   echo $NAME
EOF

如何将 bash 脚本中的变量传递给 sshpass?谢谢!

放在-p选项后面:

password=YourPassword
sshpass -p "$password" ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress 'bash -s' <<EOF
    echo "$NAME"
EOF

您可以简单地在变量名前加上一个美元符号,如本例所示:

Linux Prompt>cat test.txt
<here you see file content>
Linux Prompt>filename=test.txt
Linux Prompt>cat $filename
<here you see file content>

最简单的方法是在 运行 bash

之前使用 env
NAME="HARRY"
sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress env NAME="$NAME" 'bash -s' << 'EOF'
   echo $NAME
EOF

您可以使用多个 env 语句传递多个变量,例如

export NAME="HARRY"
export SOMEVAR="hello"
sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress env NAME="$NAME" env SOMEVAR="$SOMEVAR" 'bash -s' << 'EOF'
   echo $NAME
EOF

请注意,您的变量在传递时可能会被解释。您可以通过将 env NAME="$NAME" 更改为未解释的版本 env NAME="'$NAME'"

来避免这种情况