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
如果该目录仅存在,则不会生成错误。 - 使用该运算符,仅当前一个操作没有错误地退出时
&&
,您才会执行以下操作。cat
mkdir
- 最后一个
cat >> ~/.ssh/authorized_keys
是调用cat
没有文件。~/.ssh/authorized_keys
由于重定向运算符 ( ) ,其输出将被附加(如果可能)到文件中>>
。
- 您将创建该目录
笔记:
ssh-copy-id
在许多系统上,存在将本地密钥复制到远程计算机上的命令。欲了解更多信息,请输入man ssh-copy-id
ssh-copy-id — 使用本地可用的密钥来授权远程计算机上的登录
正如 roalma 在评论中所述,原始命令行可以工作也可以不工作,具体取决于
ssh
配置的(限制性)设置。