如何在 plink sudo 命令中转义密码?

如何在 plink sudo 命令中转义密码?

当尝试使用 plink 登录到服务器时,我不知道如何在命令中正确传递 sudo 密码。

我使用这样的东西:

plink -ssh -t <user>@<server> -pw <password> "echo -e <password>\n | sudo -S docker ... | cd <some path>"

密码包含 2 个特殊字符 - 一个“;”和一个“*”字符。首先,“;”字符需要用“^”转义,然后才能建立连接。然后在命令中,我需要切换到 sudo 以使用 docker 命令。通常它应该从控制台获取密码。但不知何故,似乎需要不同的转义。我尝试了一些方法,然后在密码周围添加了单引号,尝试了在密码后面使用换行符,但我尝试的方法都没有奏效。有人知道如何让它工作吗?

假设示例密码为:abc123;*

当我在 bat 文件中使用此文本时:

SET password=abc123;*
plink -ssh -t <username>@<server> -pw abc123^;* "echo -e %password%\n | sudo -S docker exec -i <docker_container> <docker_container_path> |pwd"

我原本期望,执行完此代码后,用户将进入 docker 容器,并显示 tomcat 路径。但连接后显示的是当前目录,下面有以下几行:

[sudo] password for <user>: Sorry, try again
[sudo] password for <user>:
sudo: 1 incorrect password attempt

我尝试了不同的方法来逃避 plink 命令的密码,例如 :SET password=abc123\;\*或者 SET password=abc123%%3B%%2ASET password=abc123^;*

但都没有起作用。

注意:遗憾的是,更改用户密码或将 Linux 服务器设置为“无密码”不是一个选项。

相关内容