如何使用SSH远程写入文件

suf*_*ffa 57 ssh bash

我可以将文件复制到远程 Linux 机器上,没有问题

scp file user@host: /pathtowrite_file
Run Code Online (Sandbox Code Playgroud)

但是,我很难将文件从一台 linux 机器写入到另一台机器。这是我的尝试:

echo 'Some Text' > /remotefile.txt | ssh user@remotehost
Run Code Online (Sandbox Code Playgroud)

我得到的通知是

标准输入:不是 tty

无论如何,远程机器上的文件没有反映发送的“Some Text”的文本。

Ara*_*orn 89

您可以使用“cat”命令来创建远程文件。

echo 'Some Text' | ssh user@remotehost -T "cat > /remotefile.txt"
Run Code Online (Sandbox Code Playgroud)

-T禁用伪终端分配和阻止你获得的消息,

不会分配伪终端,因为 stdin 不是终端。

  • “cat > /remotefile.txt”在远程机器上运行,如果您想附加到现有文件,请将“>”替换为“>>” (2认同)
  • ` echo 'Some Text'|ssh user@remotehost "tee -a /remotefile.txt"` 也对我有用。 (2认同)

小智 15

比另一个答案短一点:

ssh user@remotehost "echo Some Text > /remotefile.txt"
Run Code Online (Sandbox Code Playgroud)

  • 真的; 这将起作用 - 如果将一行文本写入远程文件真的是 OP 想要做的。问题中的命令看起来像一个概念验证测试。问题说,“将文件从一台 Linux 机器写入另一台机器。” 如果用户想要在本地运行任意命令(或命令序列)——而不仅仅是一个“回声”——那么你的答案没有帮助,接受的答案就是这样做的方法。 (4认同)
  • 好的,你*想要*更多的批评?(1) 你到底为什么说`ssh localhost`?那只是把水弄混了,而不是让它变得更清澈。(2) 通过在修改后的示例中不显示重定向,您提出了一个问题,即您是否知道如何对命令进行分组并将所有输出发送到一个文件。……(续) (2认同)
  • (续)…… (3) 你没有注意到我的观点,因为你把注意力集中在“一行文字”这个短语上。我的观点是 OP 可能想要做一些比将*已知文本*写入远程文件更复杂的事情——他可能想要运行 ***local*** 命令并将输出发送到远程文件,如 * `命令(本地主机)`* `> ` *`文件(远程主机)`*。如果您可以调整答案以解决一般情况,请这样做。 (2认同)

小智 7

也可以使用dd附加到文件。如果无法在远程主机上进行输出重定向,可能有点晦涩但很有用。

cat ~/.ssh/id_rsa.pub | ssh user@remote.host 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'
Run Code Online (Sandbox Code Playgroud)

此示例将您的公钥附加到远程主机上的 authorized_keys 文件。

(来源:http : //www.rsync.net/resources/howto/ssh_keys.html