cat [file..] 通过管道传输另一个 cat 命令

cat [file..] 通过管道传输另一个 cat 命令
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

有人可以解释一下报价是如何运作的吗?

据我了解。我正在读取磁盘上的公钥,然后将其通过管道传输到服务器,如果不存在则创建一个目录,然后...我是否使用第二个串联从磁盘中读取?正在连接什么?

它变得令人困惑,因为我习惯于在 cat 命令之后查看文件。

答案1

该命令cat能够连接文件并将它们打印在标准输出上。
当不指定任何文件或使用 来调用它时-,它将读取标准输入。
在您的命令中,它以两种方式使用。

一步步:

  • 命令的第一部分 ( cat ~/.ssh/id_rsa.pub) 完全按照您的理解执行:它将本地文件打印 ~/.ssh/id_rsa.pub到标准输出。
  • 然后使用该符号|将本地标准输出重定向为以下命令的标准输入 ( ssh)。
  • ssh命令实际上将使远程计算机上的字符串内的命令""通过管道传递标准输入执行。
  • 字符串内部:
    • 您将创建该目录~/.ssh,并且由于该选项,-p如果该目录仅存在,则不会生成错误。
    • 使用该运算符,仅当前一个操作没有错误地退出时&&,您才会执行以下操作。catmkdir
    • 最后一个cat >> ~/.ssh/authorized_keys 是调用cat 没有文件~/.ssh/authorized_keys由于重定向运算符 ( ) ,其输出将被附加(如果可能)到文件中>>

笔记:

  • ssh-copy-id在许多系统上,存在将本地密钥复制到远程计算机上的命令。欲了解更多信息,请输入man ssh-copy-id

    ssh-copy-id — 使用本地可用的密钥来授权远程计算机上的登录

  • 正如 roalma 在评论中所述,原始命令行可以工作也可以不工作,具体取决于ssh配置的(限制性)设置。

相关内容