我正在编写一个工具,除其他外,需要能够通过SSH连接修改文件。但是,由于安全问题,我不想在远程服务器上调用CLI工具(TL; DR:字符串转义非常困难)。如何使用(a)ssh命令行工具(本地调用)或(b)golang.org/x/crypto/ssh/*
包来执行此操作?
编辑:抱歉,我忘了提及。我需要能够在一次会话中完成所有这些工作。在某些客户端上,连接的服务器位于负载均衡器后面,因此如果我进行多次调用,我可能最终会连接到不同的服务器。
答案 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再次上传。
答案 2 :(得分:0)
通过SSH操作文件最便携的方法是使用SFTP protocol。 SFTP主要用于传输文件,但它实际上是一个远程文件系统协议。它可以在远程系统上执行以下所有操作:
SFTP公开了POSIX(类似unix)的命名方案。文件分隔符是“/”,绝对路径以“/”开头。文件属性也遵循POSIX模型。