如何在 shell 脚本中对 rdesktop 密码参数进行编码?

mit*_*mit 4 rdp shell bash unix-shell rdesktop

我可以使用此脚本从 linux 连接到 windows RDP 会话:

#!/bin/bash
/usr/bin/rdesktop -N -x m -u Administrator -p secret123 -d DOMAIN1 127.0.0.1:33891
Run Code Online (Sandbox Code Playgroud)

(远程 Windows 服务器的 rdp 端口​​被安全地隧道连接到本地主机上的端口 33891)

但是这个脚本没有正确传输密码:

#!/bin/bash
/usr/bin/rdesktop -N -x m -u Administrator -p #secret$123# -d DOMAIN2 127.0.0.1:33892
Run Code Online (Sandbox Code Playgroud)

我必须如何对密码中的特殊字符进行编码?

我还想知道如果我选择 /bin/sh 作为脚本的 shell 是否会有所不同。

编辑:

我发现这有效:

\#秘密\$123\#

Den*_*son 5

我建议您将密码存储在一个文件中并通过rdesktop管道传递给它。这样,密码在运行ps或类似操作时不会在命令行中显示为参数。

cat secretfile | /usr/bin/rdesktop -N -x m -u Administrator -p - -d ...
Run Code Online (Sandbox Code Playgroud)

然而,要回答你的问题,简单地引用这个论点可能就足以使它起作用:

/usr/bin/rdesktop -N -x m -u Administrator -p '#secret$123#' -d ...
Run Code Online (Sandbox Code Playgroud)

编辑:

要使用变量(该值将在 的输出中可见ps):

var='#secret$123#'
/usr/bin/rdesktop -N -x m -u Administrator -p "$var" -d ...
Run Code Online (Sandbox Code Playgroud)

或者

var=$(<secretfile)    # read from a file (doesn't work in sh)
/usr/bin/rdesktop -N -x m -u Administrator -p "$var" -d ...
Run Code Online (Sandbox Code Playgroud)