ssh-keygen教程第4章:copy公钥要服务端

ssh教程第4章:copy公钥要服务端

上一章,我们已经生成了公钥和私钥,这一章我只需要将公钥copy到服务器(远程主机)就可以实现免密码登录了。

graph LR
    本地主机 --ssh-copy-id--> 远程主机

ssh-copy-id 公钥上传到远程主机

$ ssh-copy-id root@k8s-node1
/usr/bin/ssh-copy-id: ERROR: failed to open ID file '/root/.pub': No such file or directory
        (to install the contents of '/root/.pub' anyway, look at the -f option)

从提示中看,是没有找到hellodemos.pub这个文件,所以我们可以通过-i选项指定pub文件所在的位置:

$ ssh-copy-id -i ~/.ssh/hellodemos.pub root@k8s-node1
  • root是远程服务器的用户名
  • k8s-node1主机名(IP)

注意,你如果在上一章改了公钥的名字,那么这里就需要填写具体的文件名字 *.pub

输出:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "hellodemos.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/root/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/root/.ssh/id_rsa": bad permissions
  • 上面有一段关于权限的说明, Permissions 0755 for '/root/.ssh/id_rsa' are too open 需要0755的权限才能打开。 Load key "/root/.ssh/id_rsa": bad permissions 这句话也代表了权限似乎错误了。

这时候,我们需要设置文件的权限。

系统自动在服务器机器root/.ssh目录中生成authorized_keys文件,这个文件的内容和本地机上的 pub文件一摸一样,就是 ssh公钥文件


sh-copy-id可能遇到的权限问题

为了让私钥文件和公钥文件能够在认证中起作用, 需要确保权限的正确性:

  1. 对于.ssh目录以及其内部的公钥、私钥文件, 当前用户至少要有执行权限, 其他用户最多只能有执行权限.

  2. 不要图省事设置成777权限: 太大的权限不安全, 而且数字签名也不支持这种权限策略.

  3. 对普通用户, 建议设置成600权限: chmod 600 ~/.ssh/*;

  4. 对root用户, 建议设置成644权限: chmod 644 ~/.ssh/*.

我这里是root用户,执行chmod 644 ~/.ssh/*修改权限就可以了。


一键配置2台机器ssh免密登录脚本

还是那句话,如果你觉得麻烦,执行一键安装ssh免密码登录就可以了,我们讲这么多,仅仅为了你可以了解原理。:)

wget http://66-ai.com/download/script-litte-prince/app/ssh-keygen.sh -O /root/ssh-keygen.sh && sh /root/ssh-keygen.sh