生成密钥
利用指令生成一对(公钥、私钥)。公钥用于上传服务器,私钥留在本机。
- 参数t用于指定加密类型,有dsa | ecdsa | ed25519 | rsa
- 参数b用于指定密钥长度
ssh-keygen -b 4096 -t rsa
密钥对默认保存在(前缀)/.ssh文件夹内。
发送密钥
指令发送
接着把公钥上传到服务器。
- i 指定上传哪一个公钥文件,如id_ed25519.pub
- p 指定端口
ssh-copy-id [-i filename] [-p portnumber] username@ip
手动复制
实际上直接把id_ed25519.pub里面的内容复制到对应机器用户下的~/.ssh/authorized_keys文件内即可
存储结构
服务器端公钥放置
- 本机作为服务器的公钥将会被放在authorized_keys这个文件里面
- 它的每一个entry正是访问机器发给它的公钥
主机名配置
由于每次都需要username@ip的形式登录,可以写一个config文件简化此过程。
在config文件里设置username和ip等详细信息。
后续只需要ssh test,即可连接上主机。
(下面的Host等关键字,大小写不重要;HostName前面的空格,也不重要)
密钥
密钥根据加密方式会有不同的文件名。
如用ed25519加密的密钥对,如下:
- 没有后缀的为私钥
- 有pub后缀的是公钥
known_hosts文件
- 似乎无论你是何种加密方式,都会存在有几种加密方式的记录entry,如下就有三种。
- 同时哪怕你删除了全部entry,重新登录之后仍然会恢复成如下所示。
- 此文件用途本人未深究。
当你访问的机器: - 首次访问
- 更新公钥
你就需要把他的连接信息保存到known_hosts中。
- 注意:此处并不是把SHA256后面的值存入known_hosts中,具体是什么,暂未研究。
本校网络相关
在操作ssh无密码登录的过程中,我发现了一些现象:
- 接入办公室wifi的mac可以ssh通楼上的服务器(49.123.X.X)
- 楼上的服务器却ssh不通我的mac(192.168.1.103)
- mac登录服务器时显示的ip也是49.123.X.X类型的
后来发现办公楼内所有单根网线都是49开头的ip,而接入wifi WAN口的线也是如此。
因而mac在办公室wifi的子网下,而服务器处于更高一层的网络。所以mac可以通过ip4和ssh端口找到服务器,但服务器不能通过ip4和ssh端口找到mac。
未完成
- [ ]网上说这个49.123.X.X是cernet提供的网络服务,全国大部分高校的校园网都在这个系统里面。但49.123.X.X却又不是一个公网ip
参考
https://cloud.tencent.com/developer/article/1720991
关于 Linux 中 known_hosts 文件的必知必会
查ip相关信息的网站-中文
查ip相关信息的网站-英文(上下不同)