【问题标题】:Send SSH escape character programmatically以编程方式发送 SSH 转义字符
【发布时间】:2013-09-12 20:55:51
【问题描述】:

当我 ssh (OpenSSH) 到服务器时,我可以键入“~C”进入 ssh 的命令行,然后打开一些隧道。有没有办法编写这个脚本或编写一个 C 程序来做到这一点?我想通过 ssh 连接到我的服务器,然后运行命令打开隧道。

【问题讨论】:

  • 有办法做到这一点。您是否要求我们提供代码演示如何做到这一点?如果是这样,您应该展示您尝试过的方法,并解释为什么它不起作用。
  • 隧道从哪里到哪里?一般来说,ssh-L-R 选项很有帮助(请参阅man ssh)。
  • 锡人 - 如果有办法做到这一点,请让我知道一般情况下如何。也就是说,客户端连接到服务器后,运行在服务器端的程序如何在客户端打开隧道呢?
  • -L 和 -R 无济于事,因为它们是在建立连接之前在客户端传递的。

标签: linux bash ssh


【解决方案1】:
  • 在手动建立的 SSH 会话中,不 -- 任何程序输出都将进入其标准输出
  • 否则,您可以编写程序来驱动 ssh 会话。或者您可以使用expect 来驱动一个,如http://ubuntuforums.org/showthread.php?t=220139(或搜索expect + ssh 以获取更多示例)
  • 驱动 SSH 客户端的程序可以使用服务器打印的信息来打开适当的隧道(通过读取服务器输出,然后在有足够信息时模拟 ~C 按键)

【讨论】:

  • Expect 可以工作,但必须在客户端运行。我正在寻找一种在连接建立后从服务器端打开隧道的方法。
  • 无论服务器端发生什么都不会打开隧道。想一想这会带来多大的安全风险。隧道由您的 ssh 客户端打开,以响应来自您的终端(或驱动 ssh 的任何人)的命令。您可能需要的任何隧道都可以从客户端使用 -R 或 -L 进行描述(如果您不同意,请提供反例)
  • 我更新了答案以反映您的 ssh 客户端驱动程序(例如期望)可以读取服务器的输出以确定要打开哪些隧道的事实。也许这会对你有所帮助?
  • 安全风险确实存在。预期的想法会奏效,但目标是让我的最终用户更容易打开端口。教他们使用 ~C 比让他们运行期望脚本更容易。但谢谢你的想法。我也不认为这是可能的,但我很高兴至少有 1 人证实了这一点。谢谢。
猜你喜欢
  • 2012-04-21
  • 1970-01-01
  • 2011-09-09
  • 2018-12-30
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多