telnet:远程登录,23/tcp应用层协议
C/S
S:telnet服务器
C:telnet客户端
ssh:Secure SHell 也是远程登录协议,也是应用层协议:22/tcp
ssh整个通讯过程和认证过程都是加密的,还能实现主机认证
用户认证过程加密
数据传输过程加密
另外一种不用传递密码的验证方式,只需要通过用户名+随机数就可以登录认证:
客户端和服务器端都维护一个对称秘钥,客户端生成一对公钥和私钥,然后把公钥先给服务器,以后客户端要登录的时候,直接生成一个随机数据+用户名,用对称秘钥加密,然后用私钥再加密,发送给服务器,服务器用对称秘钥揭秘,再用公钥解密,如果能得到数据,就说明客户端是合法的客户端。
主机认证过程:
基于口令认证(用户名和密码)
基于秘钥认证(即上面说的那种:用户名+随机数)
协议:规范
实现:服务器端,客户端
Linux:openSSH
C/S架构
服务器端:sshd,配置文件在/ect/ssh/sshd_config
客户端:ssh,配置文件在/ect/ssh/ssh_config
ssh-keygen:秘钥生成器(为某个用户生成一对秘钥)
ssh-copy-id:将公钥传输至远程服务器
scp:跨主机安全复制工具
ssh:指定那一个主机用户来登录
ssh username@HOST
ssh -l username HOST
ssh username 'command' 以某个用户在远程服务器上执行某任务
scp:
scp SRC DEST (源可以本地也可以是服务器)
-r
-a
scp username@HOST:/path/to/somefile /path/to/local 远程到本地
scp /path/to/local username@HOST:/path/to/somefile 本地到远程
ssh-keygen: 帮我们在客户端生成一对秘钥
-t rss
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
公钥追加保存到远程主机某用户的家目录下的.ssh/authorized_keys文件或.ssh/authorized_keys2文件当中
ssh v1(无法避免中间人攻击),v2
主机秘钥
非对称加密
Secret key--服务器
Public key--客户端
客户端我们去哪里拿到他的公钥?如果本地没有,通讯时接收对方公钥
客户端拿到公钥之后,生成对称密码,把这个密码发送给服务器(秘钥交换)
接下来数据用对称密码加密(因为对称加密比非对称加密快:十的三次方数量级)
为了安全性:
1.用普通用户登录,之后再切换root用户
2.定期更新密码