0%

ssh免密码登录(ssh-keygen)

ssh 公钥认证是 ssh 认证的方式之一。
通过公钥认证可实现 ssh 免密码登陆,Github 也可以通过公钥进行认证的。

文件目录

不论是 WindowsMac 还是 Linux,在用户目录下,有一个 .ssh 的目录(如果在生成 SSH KEY 的时候不指定目录,就会放到例如 /Users/xuan/.ssh 这个目录下)
在这个目录下就是和该用户 ssh 配置相关的文件,主要有如下几个

  • id_rsa 私钥文件,不要给他人
  • id_rsa.pub 公钥文件,用来验证
  • authorized_keys 存放其他机器公钥,可以免密登陆这台计算机
  • known_hosts 存放已经验证过密钥的网站

密钥使用

使用命令生成密钥

在命令行输入 $ ssh-keygen 可用来生成 ssh 公钥认证所需的公钥和私钥文件。
id_rsaid_rsa.pub 两个文件
然后回车默认设置即可看到在.ssh 文件中生成了需要的内容

使用 id_rsa.pub 免密码登录

  • 对于 GitHub|Coding 这样的网站
    在网站找到个人设置的 SSH 公钥设置,将 id_rsa.pub 的内容添加进去,在进行 git clone 等操作拉取 SSH 类型的 Remote 地址仓库时便可以不需要输入密码
  • 想要免密码登陆某台计算,例如某个服务器
    如果你想要可以免密登陆某台计算机,则需要将自己的公钥的内容拷贝到需要连接的电脑上~/.ssh/authorized_keys 中,可以使用文本编辑器复制粘贴,也可以使用命令
    $ cat id_rsa.pub >> ~/.ssh/authorized_keys
  • 需要注意的是 ~/.ssh/authorized_keys 的权限是 600,否则可能 client 进行 ssh 的时候需要输入密码
  • 添加完成之后就可以直接使用 ssh 命令进行登录了。eg. ssh root@192.168.0.101

已存记录的删除方法

之前在使用树莓派的时候遇到了一个问题,树莓派的工作环境在变动,有两个不一样的电脑对树莓派进行 ssh 连接,但是由于路由器分配 ip 的时间不同,出现了第二台电脑在某一时刻分配到了之前第一台电脑的 ip,但是树莓派的 know_hosts 文件中记录的是之前的电脑的认证信息,所以会出现第二台电脑验证错误情况。

在这里需要清除原有公钥信息,重新输入密码进行链接。在树莓派上使用命令 $ ssh-keygen -R 192.168.1.112,然后就可以重新 ssh 输入密码连接。

SSH 公钥登陆的过程

  1. 客户端发出公钥登陆的请求 ssh user@host
  2. 服务端返回一段随机字符串
  3. 客户端用私钥 Private Key(id_rsa) 加密这个字符串,再发送回服务端
  4. 服务端用 ~/.ssh/authorized_keys 里面存储的公钥 Public Key 去解密收到的字符串。如果成功,就表明这个客户端是可信的,客户端就可以成功登陆

多电脑使用同一个 SSH KEY

每次自己换电脑总是很麻烦,需要自己重新生成一对 KEY,然后传到网上。其实我们可以自己将两个文件备份,然后在重装系统或者换电脑之后拷贝过去即可,但是需要注意的是文件的权限问题

  • .ssh 文件夹的权限应该是 700
  • id_rsa 权限应该是 600
  • id_rsa.pub 权限应该是 644
  • authorized_keys 权限应该是 600

总结

ssh 免密码连接是非常常见的一种使用进行连接的方法。对于目前的需求来说也就只有几个命令。

1
2
3
4
5
6
7
8
9
创建 `.ssh`文件夹和其中的文件的命令
$ ssh-keygen

将自己的公钥拷贝到需要连接的电脑上
$ cat id_dsa.pub >> ~/.ssh/authorized_keys

清除原有公钥信息(第二行是清理带端口的连接)
$ ssh-keygen -R 192.168.1.112
$ ssh-keygen -R [192.168.1.112]:28932

补充

之前在 Ubuntu16.04 在服务器添加完公钥后,客户端连接的时候报错
sign_and_send_pubkey: signing failed: agent refused operation
执行下面的命令即可

1
2
$ eval  "$(ssh-agent -s)"
$ ssh-add
听说好看的人都关注了我的公众号《泫言》