如果该目录尚不存在,如何使用 ssh 将文件转换为远程 Linux 目录中的文件?

Dou*_*ner 11 ssh authorized-keys

我正在尝试将公共 id_rsa.pub 文件从我的 Mac 发送到 Linux 服务器上我的主目录中的 ~/.ssh/authorized_keys 目录,这样我就可以访问而无需每次登录。

从我的 Mac 终端,我使用这个命令:

cat ~/.ssh/id_rsa.pub | ssh username@remoteserver 'cat >> ~/.ssh/authorized_keys'
Run Code Online (Sandbox Code Playgroud)

如果远程 ~/.ssh 目录已经存在,则此方法有效,否则无效。在这种情况下,我必须先登录远程服务器,创建 .ssh 目录,然后注销,然后运行上述命令。之后,我可以在不登录的情况下通过 ssh 连接到远程服务器。

我需要为几十台服务器执行此操作,所以我想知道是否有一种方法可以修改上述命令以创建远程 .ssh 目录(如果它尚不存在)。

谢谢,

道格

Kam*_*ski 30

ssh-copy-id

通常ssh-copy-id会处理不存在的目录或文件。如果可以,请使用它;不要重新发明轮子。


没有ssh-copy-id(无论出于何种原因)

在远程端,您在 shell 中运行命令。运行更多命令。确保额外的命令在执行之前cat不会使用stdin (</dev/null如果需要,请使用)。这里既不使用标准输入,cd也不mkdir使用标准输入,所以这应该有效:

cat ~/.ssh/id_rsa.pub | ssh username@remoteserver '
   cd ~/ || exit
   mkdir -pm 700 .ssh
   cat >> .ssh/authorized_keys
   chmod 600 .ssh/authorized_keys
'
Run Code Online (Sandbox Code Playgroud)

笔记:

  • -pmkdir如果./.ssh已作为目录存在,则不会抱怨。
  • -m 700 从一开始就设置正确的模式。

代码可以改进。我的主要观点是您不仅限于单个cat.

  • 您也可以使其独立于工作目录;`mkdir -pm 700 ~/.ssh; 猫 &gt;&gt; ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys`。 (3认同)
  • 普通的旧`ssh-copy-id user@server` 有效。谢谢! (2认同)