记一次阿里云中ssh 免密登录。
前景最近在学习linux中,学到了ssh的部分内容,于是便准备在阿里云中去实际操作一把环境阿里云学生服务器ubuntu(client)->centos(server)ssh介绍—-维基百科 Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SS...
前景
最近在学习linux中,学到了ssh的部分内容,于是便准备在阿里云中去实际操作一把
环境
- 阿里云学生服务器
- ubuntu(client)->centos(server)
ssh介绍
—-维基百科
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接[2]。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令
我们可以看到,ssh是一个网络传输协议,用来加密数据传输的,由于是传输层的协议,所以是基于TCP的安全连接,大致有两个阶段,一个是会话阶段,一个是验证用户阶段
会话阶段
初次学习,着重于使用方法,理解基本的理论。由于是基于TCP会话的,所以必定有一个建立会话的过程,在建立会话的时候,双方使用的是对称密钥算法,(对称密钥,加密密钥和解密密钥能相互推到出来),是基于会话然后随机生成的,一方用于加密信息的密钥等同于另一方用于解密信息的密钥,而任何第三方由于不持有该密钥,会话密钥的传递的时候,会用各自的公钥和私钥进行会话密钥的加密。(此处省略会话密钥交互的详细过程)
验证用户阶段
验证用户阶段可以说是所有Linux系统都会用到的一个东西,ssh的验证是非对称密钥,有好几种算法,默认的是RSA,学过一些密码学的基础知识的,应该明白RSA是基于大素数分解的,安全性蛮高的,通过指纹锁定服务器,防止他人冒充服务器(中间人攻击),以及各种加密
基本流程
- 客户端发送自己的密钥ID给服务器端
- 服务器在自己的authorized_keys文件中检查是否有此ID的公钥
- 如果有,则服务器生成一个随机数,用该公钥加密之
- 服务器将加密后的随机数发给客户端
- 客户端用私钥解密该随机数,然后在本地为随机数做MD5哈希
- 客户端将该MD5哈希发给服务器端
- 服务器端为一开始自己生成的随机数也做一个MD5哈希,然后用通讯通道“公共的密钥”将该哈希加密,再跟客户端发来的内容进行对比。如果双方内容一致,则通过验证,开放访问权限给客户端
实际操作
用最简单的密码验证
客户端:
ssh root@ip地址
输入你的服务器账号和密码就能验证通过了。这种验证的弊端就是,太简单了。在执行了这个步骤之后,会生成一种指纹信息,标识着服务器的各种信息,代表了服务器的唯一性,用的是ecdsa加上各种信息或者算法,生成的唯一标识,在client客户端上~/.ssh/目录中生成konwn_hosts文件,这个信息,是服务器用密钥生成的,如果在服务器中误删了密钥,那么客户端指纹会失效,需要重新生成
root@dream-Lenovo-Y430P:~/.ssh# cat known_hosts
|1|+9/Eie9DShbIxH2qiTEoOPZrBr4=|2h7R37rZqTi31ks88o1e1ZN5lBg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIZxW1J03RwpVShWgUirLzT3YfI。。。。
服务器:/etc/ssh目录下,pub为公钥,没有后缀的为私钥
[root@izwz9gxqscz1wuxvr9ntffz ssh]# ls
moduli ssh_host_dsa_key.pub ssh_host_ed25519_key.pub
ssh_config ssh_host_ecdsa_key ssh_host_rsa_key
sshd_config ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub
ssh_host_dsa_key ssh_host_ed25519_key
免密登录
免密登录,在客户端上生成密钥对,将自己的公钥发送给服务器,自己保留私钥和公钥
客户端:
第一步:生成密钥,并选择密钥生成的路径,(我放在/root/.ssh下了)和passphrase(验证短语)
ssh-keygen
查看生成的公钥和私钥文件:
root@dream-Lenovo-Y430P:~/.ssh# ls
id_rsa id_rsa.pub known_hosts
第二步:向服务器发送自己的公钥文件(这是最好用最方便的方法)
ssh-copy-id -i 公钥文件 root@服务器ip
验证:
客户端的公钥
root@dream-Lenovo-Y430P:~/.ssh# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDm5B77DEbpseLBgAVzbipWjj3gNkujx9UN27AxmqMUQPT9K1ef49HLwJ+NLckXoKd03DDiV7p90SzMCzWhKtwrG1ooTIT0dadHrN+mbaSyeaIxg2kf50hn78zkBw8eGl6BY6IN0dl6KiH/QKg4OsVu2ZLQXQBQoaTzDp3FWqK+Ak93piN9jfNIK5aYnci1rSS744+Nozqy。。。
服务器端接受到的认证钥匙
[root@izwz9gxqscz1wuxvr9ntffz .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDm5B77DEbpseLBgAVzbipWjj3gNkujx9UN27AxmqMUQPT9K1ef49HLwJ+NLckXoKd03DDiV7p90SzMCzWhKtwrG1ooTIT0dadHrN+mbaSyeaIxg2kf50hn78zkBw8eGl6BY6IN0dl6KiH/QKg4OsVu2ZLQXQBQoaTzDp3FWqK+Ak93piN9jfNIK5aYnci1rSS744+Nozqy。。。
不难看出,两个文件内容是一样的
第三步:将自己的私钥加入ssh-agent,ssh代理,它会帮你自动输入密码短语passphrase,不然以后每次都要输入密码短语,这是一个坑!不然每次输密码,不是很懵逼吗- -
# 加入代理,输入你的密码短语
ssh-add ~/.ssh/id_rsa
# 查看ssh代理的内容
ssh-add -l
root@dream-Lenovo-Y430P:~/.ssh# ssh-add -l
2048 SHA256:3yXL6vFulXKpwOWmvIP9Oxr+QFM2fuKUwbVet9PuXs4 /root/.ssh/id_rsa (RSA)
提供一个详细操作链(https://www.linuxidc.com/Linux/2017-02/140642.htm)
最后结果:
总结
这次主要简单的学习了ssh的基本原理,会话阶段和认证阶段,实际操作了一下,免密登录的过程,免密登录主要适合多个服务器登录,不需要一个一个地记密码什么的,挺方便的,安全性也得到了提高。自己对这个密钥交换的过程还是蛮懵逼的,只是了解了一些,达到了会使用的基本水平。
更多推荐
所有评论(0)