如何在不使用shell命令的情况下通过SSH以编程方式修改文件?

时间:2016-02-04 23:17:27

标签: file go ssh

我正在编写一个工具,除其他外,需要能够通过SSH连接修改文件。但是,由于安全问题,我不想在远程服务器上调用CLI工具(TL; DR:字符串转义非常困难)。如何使用(a)ssh命令行工具(本地调用)或(b)golang.org/x/crypto/ssh/*包来执行此操作?

编辑:抱歉,我忘了提及。我需要能够在一次会话中完成所有这些工作。在某些客户端上,连接的服务器位于负载均衡器后面,因此如果我进行多次调用,我可能最终会连接到不同的服务器。

3 个答案:

答案 0 :(得分:1)

我不确定你打算怎么做。 SSH是一种非常严格的协议,允许您执行特定的操作:文件传输和终端连接。

您可以在此处看到不同ssh服务器具有的功能:https://en.wikipedia.org/wiki/Comparison_of_SSH_servers#Features

但是SSH只是一个协议:SSH服务器(而不是SSH客户端,这将是你的go程序)的一组命令将会理解。

如果您想要执行特定操作,我建议您构建自己的服务器,使用SSL或TLS等加密技术保护您的服务器。

PS:这个问题与Go无关,但与SSH有关,因为它对任何语言都有效。

答案 1 :(得分:1)

与你保持活力的ssh建立主连接。然后,您可以将文件下载到localhost,修改它并在通过主连接进行隧道连接时使用scp再次上传。

请参阅https://unix.stackexchange.com/a/2869

答案 2 :(得分:0)

通过SSH操作文件最便携的方法是使用SFTP protocol。 SFTP主要用于传输文件,但它实际上是一个远程文件系统协议。它可以在远程系统上执行以下所有操作:

  • 创建,删除和重命名文件
  • 打开文件进行阅读或书写;读取和写入文件中的数据块。
  • 列出目录内容
  • 读取和更改文件属性

SFTP公开了POSIX(类似unix)的命名方案。文件分隔符是“/”,绝对路径以“/”开头。文件属性也遵循POSIX模型。