所以,我想在终端中运行这个命令
pssh -h hosts -i "echo "DenyUsers $1" >> /etc/ssh/sshd_config && service sshd config"
如您所见,"
before echo words 将被破坏,它将被 "
before DenyUsers $1
命令结束。
我已经在 echo 之前和配置字之后更改了 "
,但它仍然不能像我想要的那样工作。
我是这个脚本的新手,我不知道我应该在搜索引擎中输入什么关键字:-)
最佳答案
以安全的方式执行此操作即使您不相信您的输入也会涉及更多。
使用 printf %q
生成数据的 eval
安全版本:
#!/usr/bin/env bash
# ^^^^- Requires an extension not available in /bin/sh
# printf %q is also available on ksh, but there you would write:
# echo_str=$(printf 'DenyUsers %q' "$1")
# cmd=$(printf '%q ' printf '%s\n' "$echo_str")
# as the ksh version doesn't have -v, but optimizes away the subshell instead.
printf -v echo_str 'DenyUsers %q' "$1"
printf -v cmd '%q ' printf '%s\n' "$echo_str"
pssh -h hosts -i "$cmd >> /etc/ssh/sshd_config && service sshd config"
请注意,使用 printf
而不是 echo
以获得更好的可预测性;请参阅 POSIX specification for echo
的应用程序使用部分.
关于linux - 将带引号的字符串传递给 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523268/