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

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

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


慕的地6264312
浏览 138回答 3
3回答

三国纷争

与 ssh 建立主连接,保持活动状态。然后您可以将文件下载到您的本地主机,修改它并使用 scp 再次上传它,同时通过主连接进行隧道传输。见https://unix.stackexchange.com/a/2869

胡说叔叔

我不确定你打算怎么做。SSH 是一个非常严格的协议,它允许你做特定的事情:文件传输和终端连接。您可以在此处查看不同 ssh 服务器具有的功能:https : //en.wikipedia.org/wiki/Comparison_of_SSH_servers#Features但是 SSH 只是一个协议:一组 SSH 服务器(而不是 SSH 客户端,这将是您的 go 程序)会理解的命令。如果您想执行特定操作,我建议您构建自己的服务器,使用 SSL 或 TLS 等加密技术保护该服务器,您的客户端将连接到该服务器。PS:这个问题并不是真正与 Go 相关,而是更多与 SSH 相关,因为它对任何语言都一样。

达令说

通过 SSH 操作文件的最便携方式是使用SFTP 协议。SFTP 主要用于传输文件,但它实际上是一种远程文件系统协议。它具有在远程系统上执行以下所有操作的操作:创建、删除和重命名文件打开文件进行读取或写入;读取和写入文件中的数据块。列出目录内容读取和更改文件属性SFTP 公开了 POSIX(类 Unix)命名方案。文件分隔符是“/”,绝对路径以“/”开头。文件属性也遵循 POSIX 模型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go