如何将命令作为参数传递给 ssh [重复]

2024-05-13

我的需要是让这个命令起作用:

sshpass -p XXXX ssh -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection sudo docker exec -u postgres postgres-container /bin/bash -c \" psql -d crawl-configuration -c 'select * from schema_version'\"

但结果表明 * 已被 shell 扩展,并且所有匹配的文件都作为参数传递给 psql 命令。于是我就搜索如何保护命令不被扩展,但没有成功。

我的实验给了我以下结果。

A - 以下命令有效,TOTO 显示在我的 shell 上

sshpass -p XXXX ssh -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection sudo docker exec -u postgres postgres-container /bin/bash -c \"echo TOTO\"

B - 以下命令不起作用,我的 shell 上显示一个空行

sshpass -p XXXX ssh -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection sudo docker exec -u postgres postgres-container /bin/bash -c "echo TOTO"

C - 这有效,显示 ls 的结果。我不明白为什么它有效但案例 B 不起作用?

sshpass -p XXXX ssh -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection sudo docker exec -u postgres postgres-container /bin/bash -c "ls"

D - 这有效,我得到了预期的结果

sshpass -p XXXX ssh -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection sudo docker exec -u postgres postgres-container /bin/bash -c \" psql -d crawl-configuration -c \'select version from schema_version\' \"

E - 在主机上执行此命令而不通过 ssh 有效

sudo docker exec -u postgres postgres-container /bin/bash -c " psql -d crawl-configuration -c 'select * from schema_version'"

使我的第一个命令起作用的解决方案是什么?


我想说的是:

sshpass -p XXXX ssh -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection \
  "sudo docker exec -u postgres postgres-container \
  /bin/bash -c \"psql -d crawl-configuration -c 'select * from schema_version'\""

将 ssh 执行的整个命令用双引号括起来,然后在命令内转义双引号。

或者,使用此处文档:

sshpass -p XXXX ssh -T -oStrictHostKeyChecking=no [email protected] /cdn-cgi/l/email-protection <<-'EOF'
    sudo docker exec -u postgres postgres-container \
    /bin/bash -c "psql -d crawl-configuration -c 'select * from schema_version'"
EOF

由于已引用,因此无需引用'EOF'分隔符。这-T禁用伪终端的分配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将命令作为参数传递给 ssh [重复] 的相关文章

  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • '>&0' 有用途吗(重定向到标准输入)?

    在 bash 中你可以这样做 echo test gt 1 重定向到标准输出 尽管它已经到那里了 echo test gt 2 重定向到标准错误 echo test gt 0 重定向到标准输入 当我做最后一个时 我的终端仍然打印test就像
  • 如何从正则表达式中获取所有匹配项?

    我想获得所有出现的情况 0 9A Z 以供稍后处理 我有 if cat file 0 9A Z then echo BASH REMATCH fi 这给了我第一个匹配项 但是我如何处理文件中的所有匹配项 谢谢 如果您只想获取正则表达式的匹配
  • 从 shell 脚本导入函数

    我有一个 shell 脚本 我想用 shUnit 测试它 该脚本 以及所有函数 位于单个文件中 因为它使安装更加容易 示例script sh bin sh foo bar code 我想编写第二个文件 不需要分发和安装 来测试中定义的函数s
  • cat/Xargs/命令 VS for/bash/命令

    Linux 101 Hacks 一书的第 38 页建议 cat url list txt xargs wget c 我通常这样做 for i in cat url list txt do wget c i done 除了长度之外 还有什么东
  • bash.sh 运行 cron 的权限被拒绝

    如何在这里使用 bash 脚本运行 cron 我做了如下操作 这里有错误 我想知道如何在 ubuntu 中做到这一点 我现在对它感到震惊 bash sh 文件 bin bash cd var www Controller usr bin p
  • 在 shell 脚本中将脚本目录更改为用户的 homedir

    在我的 bash 脚本中 我需要将当前目录更改为用户的主目录 如果我想更改为用户的foo主目录 从命令行我可以执行以下操作 cd foo 效果很好 但是当我从script它告诉我 bar sh line 4 cd foo No such f
  • 输入菜单选项后,我的 bash 菜单不会返回...这是我的代码

    不知道我在这里做错了什么 但我需要菜单循环并且只有在退出时才退出 我尝试了很多选项 但它只是不断弄乱我的代码和菜单 非常感谢任何帮助和 或想法 bin bash A menu driven shell script sample templ
  • 在 bash 中将 nameref 设为常规变量

    EDIT 这已被确认为一个错误并将被修复 https lists gnu org archive html bug bash 2018 03 msg00055 html https lists gnu org archive html bu
  • virtualenvwrapper 函数在 shell 脚本中不可用

    所以 我再一次制作了一个很棒的 python 程序 它让我的生活变得更加轻松 并节省了大量时间 当然 这涉及到一个 virtualenv 用mkvirtualenvvirtualenvwrapper 的功能 该项目有一个requiremen
  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • grep 跨文件的最后 n 个匹配

    我正在使用 grep 提取一组文件中的行 grep 一些字符串 log 是否可以将每个文件的最大匹配数限制为每个文件的最后 n 个匹配项 好吧 我认为 grep 不支持限制从文件末尾开始的 N 个匹配 所以这就是你必须做的 ls log w
  • cygwin bash 在 emacs shell 中无法正确显示

    我正在尝试使用 emacs 来运行 cygwin 我的环境是Windows 7 x64 emacs 24 0 93 1 cygwin 2 769 系统编码为gbk cygwin的编码系统默认为utf 8 emacs的编码系统默认为gbk I
  • Github 操作 - 错误:进程已完成,退出代码为 1

    我正在尝试设置 github 操作来部署我的应用程序 My bash 启动部署过程的脚本如下所示 bin sh set e vendor bin phpunit git push true git checkout production g
  • 仅为我自己禁用和重新启用地址空间布局随机化

    我想在我的系统 Ubuntu Gnu Linux 2 6 32 41 server 上禁用地址空间布局随机化 ASLR 但是 如果我使用 sysctl w kernel randomize va space 0 我认为这一更改将影响系统上的
  • k8s CronJob 在 pod 列表上循环

    我想在特定命名空间中的 pod 上运行循环 但诀窍是在 cronJob 中执行此操作 是否可以内联 kubectl get pods n foo 这里的技巧是在你获得 Pod 列表后 我需要循环并在 15 秒的超时时间内将每个 Pod 删除
  • 如何在变量中存储标准错误

    假设我有一个如下所示的脚本 无用 sh echo This Is Error 1 gt 2 echo This Is Output 我还有另一个 shell 脚本 也无用 sh useless sh sed s Output Useless
  • 是否可以为我的 Linux 函数复制命令的制表符补全?

    假设我有一个名为的 bash shell 函数magic 我想定义一个制表符补全功能 magic这将允许magic搭载任何给定命令的选项卡完成功能 如果可用 换句话说 我想要magic能够做这样的事情 magic git
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • SSH:连接被远程服务器关闭

    我正在尝试 ssh 登录我的远程服务器 但每当我尝试使用 ssh 命令通过终端登录时 ssh root ip address 我收到错误 Connection closed by ip address 我检查了主机拒绝和主机允许 文件中没有

随机推荐