ssh密钥

ssh密钥

  • ssh身份认证阶段中解释过,ssh认证的过程其实是客户端(ssh命令端)读取自己的私钥并推导出指纹发送给服务端(sshd端),服务端也使用自己保存的公钥推导出指纹进行对比,
    如果指纹相同说明服务端的公钥和客户端的私钥是配对的
  • 如下是公钥、私钥的指纹计算方式
$ ssh-keygen -l -f ~/.ssh/id_rsa_2
2048 2c:e9:70:a8:f5:8d:87:9f:8c:de:cf:cf:14:f4:40:52  root@xuexi.longshuai.com (RSA)
$ ssh-keygen -l -f ~/.ssh/id_rsa_2.pub 
2048 2c:e9:70:a8:f5:8d:87:9f:8c:de:cf:cf:14:f4:40:52  root@xuexi.longshuai.com (RSA)

生成密钥 ssh-keygen

-b:指定密钥长度; 
-e:读取openssh的私钥或者公钥文件; 
-C:添加注释; 
-f:指定用来保存密钥的文件名; 
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥; 
-l:显示公钥文件的指纹数据; 
-N:提供一个新密语; 
-P:提供(旧)密语;
-q:静默模式; 
-t:指定要创建的密钥类型【它支持RSA和DSA两种认证密钥】

基本权限设定

  • 生成密钥以后,建议修改它们的权限,防止其他人读取
    chmod 600 ~/.ssh/id_rsa.*

  • 设置authorized_keys权限
    chmod 600 authorized_keys

  • 设置.ssh目录权限
    chmod 700 -R .ssh

要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效

上传公钥

  • 手动上传
    cat id_dsa.pub >> ~/.ssh/authorized_keys
  • 自动上传公钥
    ssh-copy-id -i./.ssh/公钥 user@host

ssh-agent解决密钥多的情况

  • ssh-agent的工作是依赖于环境变量SSH_AUTH_SOCK和SSH_AGENT_PID的,不同用户,不同终端,只要没有和这两个环境变量配对的ssh-agent,这个agent进程就不可使用。要想使用某个agent,
    就必须在自己的shell中先设置好这两个环境变量。
    $ tree /tmp/ssh* 
    

/tmp/ssh-q3tM0FzpCcdU
└── agent.28629
/tmp/ssh-SkKrrkK6qLDq
└── agent.28817

export SSH_AUTH_SOCK=/tmp/ssh-q3tM0FzpCcdU/agent.28629
export SSH_AGENT_PID=28630

+ 使用ssh-agent后,可以通过ssh-add命令向ssh-agent注册本机的私钥,ssh-agent会自动推导出这个私钥的指纹(实际上是ssh-add计算的)保存在自己的小本本里(内存),以后只要ssh连接某主机(某用户),
将自动转发给ssh-agent,ssh-agent将自动从它的小本本里查找私钥的指纹并将其发送给服务端(sshd端)。如此一来,ssh客户端就无需再指定使用哪个私钥文件去连接

+ ssh并非一定支持ssh-agent转发的连接。
+ 要使用ssh-agent的转发功能,
  + 需要在sshd_config中开启AllowAgentForwarding选项,
  + 需要在ssh_config中开启ForwardAgent选项

ssh-agent
-a 指定ssh-agent运行时绑定的Unix Domain套接字路径,默认是$TMPDIR/ssh-xxx/agent.<ppid>
-c:生成C-shell风格的命令输出。
-d:调试模式。
-k:把ssh-agent进程杀掉。
-s:生成Bourne shell 风格的命令输出。
-t life:设置默认值添加到代理人的身份最大寿命。
ssh-add
-D: 删除ssh-agent中所有私钥(指纹)
-d: key_file删除指定私钥
-L: 列出agent当前主机上所有公钥参数,即公钥文件中的内容
-l: 列出agent当前已保存的指纹信息
-t: 设置私钥(指纹)的有效期。默认单位为秒,可以指定m(分钟)、h(小时)、d(天)、w(周)
-x: 使用一个密码将agent锁起来(lock),锁起来的agent将不再提供任何服务
-X: 解锁agent

### 关闭密码登录[为了安全性,启用密钥登录之后,最好关闭服务器的密码登录。]
  + sshd 的配置文件/etc/ssh/sshd_config,将PasswordAuthentication这一项设为no。
上一篇:【php】phpstorem201922破解版安装,亲测可以


下一篇:PHP检测是否IE浏览器