ssh 中类似 Bash 的命令替换或如何从 ssh *client* 请求东西?

Joh*_*esR 1 ssh shell bash

在 bash(和其他 shell)中,可以使用 $() 和 ``(反引号)之类的东西将命令的结果插入到命令行中。

现在,如果您有类似的东西,但对于 ssh 会话,那就太好了。因此,您处于 ssh 会话中,需要来自您自己计算机的一些信息,并希望将其放入您所连接计算机的内部命令行中。

例如,假设您想直接访问 mysql 控制台。你可以使用这样的命令:

ssh user@example.com "mysql -u blub -pmypass"
Run Code Online (Sandbox Code Playgroud)

这可行,但问题是,您可以在 ssh shell 进程的命令行中看到密码。

为了解决这个安全问题,我想要这样的东西:

ssh user@example.com "mysql -u blub -p\$(ssh-on-client 'cat pass-file')"
Run Code Online (Sandbox Code Playgroud)

它将cat passfile在 ssh 客户端而不是服务器上执行。有这样的事情吗?你有什么其他技巧可以做到这一点吗?

更新:我感谢参考我的例子的答案,但除非他们回答真正的问题,否则我不会接受它们。也就是说,是否可以从 ssh 会话内与 ssh 客户端计算机进行通信。(我知道这可能构成一个可能的安全问题)

可能的解决方案:

  • 在客户端上有一个 ssh 服务器可以连接回。(sweimann) 问题是如何获取连接回服务器的凭据。
  • 使用 ssh 创建隧道并使用一些 netcat 脚本/telnet 在服务器上执行命令并将结果发回。
  • 使用 expect 编写 shell 脚本。(扎克·汤普森)
  • 在客户端上使用围绕 ssh 的自定义包装器观察控制台并相应地采取行动。(札幌)
  • 修补 SSH 以支持这一点。邮件列表上有类似的补丁可用
  • ssh有一个选项“SendEnv”,用于在远程计算机上设置环境变量。不过,这必须在远程 sshd 上启用。

小智 5

尝试使用 <。

ssh user@example.com "mysql -u blub -p" < 文件

如果“文件”中的第一行是您的密码,则“应该”将其用于密码提示,然后其余部分将用于 sql 部分。

如果您只是在远程服务器上执行 sql 文件,请尝试:

ssh user@example.com "mysql -u blub -p <file.sql" < 密码