如果目录尚不存在,我该如何使用 ssh 来 cat 远程 Linux 目录中的文件?

如果目录尚不存在,我该如何使用 ssh 来 cat 远程 Linux 目录中的文件?

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

我从 Mac 终端使用以下命令:

cat ~/.ssh/id_rsa.pub | ssh username@remoteserver 'cat >> ~/.ssh/authorized_keys'

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

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

谢谢,

道格

答案1

使用ssh-copy-id

一般来说ssh-copy-id处理不存在的目录或文件。使用它如果可以的话;不要重新发明轮子。


没有ssh-copy-id(无论出于什么原因)

在远程端,您可以在 shell 中运行命令。运行更多命令。确保额外的命令不会在 stdin 之前消耗 stdin (如果需要则cat使用)。这里 nor都不使用 stdin,因此这应该可行:</dev/nullcdmkdir

cat ~/.ssh/id_rsa.pub | ssh username@remoteserver '
   cd ~/ || exit
   mkdir -pm 700 .ssh
   cat >> .ssh/authorized_keys
   chmod 600 .ssh/authorized_keys
'

笔记:

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

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

相关内容