How can I use sshpass with a blank password coming from a variable?
本问题已经有最佳答案,请猛点这里访问。
我想写一个脚本,它可以在不需要任何用户交互的情况下ssh到Linux目标中。我的脚本运行的机器以及我每天晚上尝试ssh到的目标都会被重新格式化,所以我不能使用ssh keygen(据我所见),因为在设置密钥时需要手动输入目标的密码。所以我尝试使用sshspass。下面是一个简单的示例,说明我希望如何使用它:
1 2 3 4 5 6 7 | #!/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" |
除非目标的密码为空,否则此操作正常。如果相反,我写:
1 2 | sshpass -p"" scp myfiles.tar.gz $user@$host:/ sshpass -p"" ssh $user@$host"tar xvf myfiles.tar.gz" |
对于那个目标来说,命令可以正常工作。所以我希望能够用我使用的"pass"变量来实现这一点。我试过像
1 2 3 4 5 | pass="" pass="""" pass="''" pass=" " |
但它们似乎都不起作用。有人知道我需要将"pass"变量设置为什么吗?
总是引用变量:
1 2 3 4 | ... pass="" sshpass -p"$pass" scp myfiles.tar.gz"$user@$host:/" sshpass -p"$pass" ssh"$user@$host""tar xvf myfiles.tar.gz" |
这可以防止空字符串消失,还可以防止其他问题,如空格分隔的密码和星号转换为文件名的密码。
PS:ShellCheck会自动指出这一点。