【问题标题】:plink in PowerShell to run commands on Linux machine (SuSE)在 PowerShell 中 plink 以在 Linux 机器上运行命令 (SuSE)
【发布时间】:2018-02-05 14:17:41
【问题描述】:

我正在尝试自动化在 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/;" 
)

方法一:使用 .ppk 文件

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

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

方法二:使用直接登录

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

在这里,我在控制台上得到以下响应

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

虽然我可以使用 putty.exe 使用该密码登录,但我不明白为什么密码验证失败。

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

【问题讨论】:

  • 在命令行上运行plink -ssh -i ... 会发生什么?

标签: linux powershell-3.0 putty plink


【解决方案1】:

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

不过,我不确定为什么您的第一种方法会导致控制台挂起。如果密钥受密码保护,则应提示您输入密码。 "vgcreate test_vog /dev/sde" 的末尾缺少一个分号,但如果这导致了问题,我希望看到一条错误消息。

尝试使用参数-v(详细消息)运行plink,以更好地了解正在发生的事情。

【讨论】:

  • 嗨 Ansgar,非常感谢它确实有效。但问题是,我以 linuxadmin 用户身份登录,但我需要超级用户访问权限才能运行这些命令。下面是详细的,我试图找到解决方案,但找不到。如果您能在此处使用用户名“linuxadmin”帮助我,将不胜感激。发送密码 访问权限 以主通道打开会话 已打开主通道 启动 shell/命令 服务器发送命令退出状态 127 bash: fdisk: command not found Disconnected: All channels closed
  • 以下是完整的命令 run verbose 使用用户名“linuxadmin”。发送密码 访问权限 以主通道打开会话 已打开主通道 启动 shell/命令 sudo:不存在 tty 且未指定 askpass 程序 bash:pvcreate:未找到命令 bash:vgcreate:未找到命令 bash:mkfs.ext3:未找到命令mkdir:无法创建目录“/azurenew”:权限被拒绝 bash:/etc/fstab:权限被拒绝安装:/azurenew/:没有这样的文件或目录服务器发送命令退出状态 1 断开连接:所有通道关闭
  • 移除 sudo su 并在所有需要 root 权限的命令前加上 sudo ($commands = "sudo pvcreate ...;", "sudo vgcreate ...;", ...)。
  • 谢谢安斯加。但它仍然没有运行。但是 plink -ssh -pw 'pass1' -t linuxadmin@xx.xx.xx.xxx echo linuxadmin_123 | sudo -S ls" 允许以 sudo 用户身份登录。我正在尝试运行多个命令
  • 更改sudo 配置以允许用户linuxadmin 运行命令without being prompted for a password
猜你喜欢
  • 2015-07-30
  • 1970-01-01
  • 2018-02-16
  • 2017-07-13
  • 2013-03-25
  • 2020-09-23
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
相关资源
最近更新 更多