PowerShell中的plink在Linux机器上运行命令(SuSE)

时间:2017-08-28 10:23:56

标签: linux powershell-v3.0 putty plink

我正在尝试自动化在linux机器中添加额外存储的过程。我在Windows计算机上安装的PowerShell中使用plink

以下是代码:

$plinkpath = "C:\Users\mydrive\Modules\plink.exe"
if (Test-Path $plinkpath) {
    Set-Alias plink $plinkpath
} else {
    throw "Plink.exe is reqruied"
}
$passw = "linuxadmin$123"
$commands = @(
    "sudo su;",
    "pvcreate /dev/sde;",
    "vgcreate test_vog /dev/sde",
    "lvcreate -l 100%FREE -n test_lev test_vog;",
    "mkfs.ext3 /dev/test_vog/test_lev;",
    "mkdir /azurenew;",
    "echo ""/dev/test_vog/test_lev /azurenew/ ext3 defaults 1 1"" >> /etc/fstab;",
    "mount /azurenew/;" 
)

方法1:使用.ppk文件

plink -ssh -i "C:\Users\amurthy\Documents\WindowsPowerShell\Modules\sshprivate.ppk" linuxadmin@xx.xx.xx.xxx $commands

在上述情况下,PowerShell挂起并且在控制台上没有响应。不确定发生了什么。

方法2:使用直接登录

plink -P "22" -v "linuxadmin@xx.xx.xx.xxx" -pw "linuxadmin$123" $commands

在这里,我在控制台上得到以下回复

使用用户名" linuxadmin"。 发送密码 密码验证失败

我不明白为什么passoword身份验证失败了,虽然我能够使用带有该密码的putty.exe登录。

有谁可以帮我解决上面的自动化问题?如果您有任何更好的解决方案,我们非常欢迎。

1 个答案:

答案 0 :(得分:0)

密码登录尝试失败,因为您在双引号字符串中定义了密码。 PowerShell尝试在UIImage中展开(未定义的)变量$123,因此您实际上只传递了linuxadmin$123作为密码。您可以使用单引号字符串来避免这种情况,但公共密钥身份验证(您的第一种方法)无论如何都是更好的方法,所以我建议坚持使用。

我不确定为什么你的第一种方法导致控制台挂起。如果密钥受密码保护,则应提示您输入密码。在linuxadmin结尾处有一个分号丢失,但是如果这导致了一个问题,我希望看到一条错误信息。

尝试使用参数"vgcreate test_vog /dev/sde"(详细消息)运行plink,以便更好地了解正在发生的事情。