我正在尝试将公共 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/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
'
笔记:
-p
mkdir
如果./.ssh
已经作为目录存在则不会抱怨。-m 700
从一开始就设置正确的模式。
代码可以改进。我的主要观点是,您不仅限于单个cat
。