如何使用带有来自变量的空白密码的sshpass?

时间:2014-02-12 00:46:40

标签: bash ssh

我想编写一个脚本,可以在没有任何用户交互的情况下进入linux目标。我的脚本运行的机器以及我正在尝试ssh的目标每晚重新格式化,所以我不能使用ssh-keygen(据我所见),因为我需要进入设置密钥时手动设置目标密码。所以相反,我正在尝试使用sshpass。这是一个我想如何使用它的简单例子:

#!/bin/bash
host=$1
user=$2
pass=$3

sshpass -p $pass scp myfiles.tar.gz $user@$host:/
sshpass -p $pass ssh $user@$host "tar xvf myfiles.tar.gz" 

当目标的密码为空时,此工作正常。如果相反,我写:

sshpass -p "" scp myfiles.tar.gz $user@$host:/
sshpass -p "" ssh $user@$host "tar xvf myfiles.tar.gz"

这些命令适用于该目标。所以我希望能够以某种方式使用我正在使用的'pass'变量。我尝试过像

这样的事情
pass=""
pass="\"\""
pass="''"
pass="\n"

但它们似乎都没有用。有谁知道我需要将'pass'变量设置为?

1 个答案:

答案 0 :(得分:0)

始终引用您的变量:

...
pass=""
sshpass -p "$pass" scp myfiles.tar.gz "$user@$host:/"
sshpass -p "$pass" ssh "$user@$host" "tar xvf myfiles.tar.gz"

这可以防止空字符串消失,还可以防止其他问题,例如空格分割的密码和带星号的密码变成文件名。

PS:shellcheck自动指出这一点。