从 Windows 上的 plink.exe 在 Linux 上执行 sudo 命令

Posted

技术标签:

【中文标题】从 Windows 上的 plink.exe 在 Linux 上执行 sudo 命令【英文标题】:Execute sudo command on Linux from plink.exe on Windows 【发布时间】:2013-12-13 10:07:34 【问题描述】:

如果我执行 plink 命令

plink  user@192.168.1.12   sudo nano /etc/hosts

在提示时输入密码,我得到

sudo:不存在 tty,也没有指定 askpass 程序

抱歉,再试一次。

sudo:不存在 tty,也没有指定 askpass 程序

抱歉,再试一次。

sudo:不存在 tty,也没有指定 askpass 程序

抱歉,再试一次。

sudo: 3 次错误密码尝试

如何从plink执行sudo command?或者有什么替代品吗?

【问题讨论】:

另见Automatically provide the root user password to “su” executed using Plink from a batch file。 【参考方案1】:

我知道这个问题很老,但这可以提供帮助

可以执行plink(putty工具)

plink -v -ssh -m "path/to/commands.txt" -l usertologin -pw PASSWORDSERVER

commands.txt:

echo -e "PASSWORD\n" | sudo -S cat /etc/passwd

sudo -S 是从标准输入接收密码,使用 echo -e "password\n" 是传递密码(而 \n 就像按 intro -new line- )

同样的方式可以执行 passwd 命令:

> echo -e "OLDPASSWORD\nNEWPASSWORD\nNEWPASSWORD" | passwd

【讨论】:

虽然这解决了手头的问题,但我认为这是一种糟糕的安全做法。如果远程主机上的任何人在正确的时间发出“ps”命令,他们将获得您的纯文本密码。编辑:错别字【参考方案2】:

为什么选择 Plink?改用 SSH。对于sudo 命令,SSH 还需要-t 选项。 来自 ssh 手册页:

 -t      Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a remote
         machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty
         allocation, even if ssh has no local tty.

【讨论】:

谢谢。如果我使用 -t 选项,那么对于 sudo 命令,它会提示输入密码。有没有办法在必须提示的情况下在命令中发送密码。 我不知道在命令中发送密码的方式。相反,在您的目标服务器上,在 sudo 中,您可以使用 NOPASSWD 选项配置用户。这样他就不会因为他运行的任何 sudo 命令而被提升为任何密码。有关 NOPASSWD 的更多信息,请阅读 sudo 文档。【参考方案3】:

你为什么在这里使用 plink?通常,您会使用 plink 在远程主机上调用非交互式脚本。如果你想做交互式的东西,(比如编辑文件),只需 ssh 到服务器(从你的 shell,在 Linux 上使用 'ssh' 客户端,或者在 Windows 上运行 putty),然后编辑文件。

更多关于plink的信息,以及一些例子,可以be found here。

【讨论】:

我需要从c sharp代码连接到linux,所以我尝试使用plink。实际上我需要调用一个脚本。我只是举了一个例子。【参考方案4】:

我需要制作一些文件夹并设置烫发。这些块在 PowerShell 中为我工作以实现自动化。那些建议只使用 SSH 的人希望已经发现这不是正确的解决方案。减少人工流程应该是每个人的目标。

$null = iex "cmd /c $plinkpath -ssh -l $linuser -pw $linpass $computername `"echo $linpass | sudo -S mkdir $puppetfolder`"" *>&1

$null = iex "cmd /c $plinkpath -ssh -l $linuser -pw $linpass $computername `"echo $linpass | sudo -S chmod o+wx $puppetfolder`"" *>&1

【讨论】:

以上是关于从 Windows 上的 plink.exe 在 Linux 上执行 sudo 命令的主要内容,如果未能解决你的问题,请参考以下文章

来自Windows服务的Plink无法找到Pageant

windows下使用emacs+plink编辑远程文件

plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)

plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)

plink和pscp命令使用(登录linux并执行命令/linux和Windows服务器文件互拷)

当标准输出没有输出时如何杀死 plink.exe? [复制]