推荐博客:图解SSH原理
作者:TopGun_Viper
链接:https://www.jianshu.com/p/33461b619d53
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
主要对上文内容做如下注解:
SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。
加密的两种方式:
基于口令认证:
通常在第一次登录的时候,系统会出现下面提示信息:
The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established. RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d. Are you sure you want to continue connecting (yes/no)?
上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹,是否继续连接?之所以用fingerprint代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹(fingerprint),这样就方便比较了。
也就是说拿到了服务端返回来的公钥key,需要用户自己确认这个公钥是不是自己的服务端主机发了的公钥,有没有被中间人拦截;
如果输入yes后,会出现下面信息:
Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts. Password: (enter password)
该host已被确认,并被追加到文件known_hosts中,然后就需要输入密码,之后的流程就按照图1进行。
确定虚拟机已经安装openssh-server,在终端输入yum list installed | grep openssh-server
如没有安装使用命令进行安装:
yum install openssh-server
对sshd服务进行配置,配置文件的位置在 /etc/ssh/sshd_config, 设置中用到的关键参数前的#号去掉并做相应的修改即可:
Port #监听端口 默认22
ListenAddress # 监听地址
PermitRootLogin #运行远程登录
MaxSessions #最大的连接session数 默认10
PasswordAuthentication # 用户密码作为验证链接
重启服务:
service sshd restart
ssh-keygen
按照提示:输入存放公钥密钥的位置/root/.ssh/id_rsa
按照提示:输入密码,这里我们设置密码qian123456
此时可以发现在/root/.ssh/下有如下两个文件:
id_rsa #存放产生的私钥
id_rsa.pub #存放产生的公钥
cat id_rsa.pub
#1024的公钥key如下
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsV0/rduydPp2HSxXAexYZPVKG4d5xrfyv+uJlFz4A5IhSrpoDPSZI525WlzEnYyuGs7xz
OUzbI3Nc81Va0/7rzZyZtP1JY5LYTRA02b3YH+1nokXIsFaqfc1NTcEN2DtoFzy0XfPVLLtnnRHqrEsDlDf49v3sRwQSXbclFh6QPQ7D6
y05VQWbYf2XzoEy4kqiFYoj21ketQytx/OAfzb1dfAINLSZIcOl4ceXGa7FssU63b0rU9Y2NK7Wo/q9w1z0+wGcMvN0pLSeNieet/WmAx
Hvzqw7CmAsEELuuBsecsip67L0puzfVMh7SJtQWqmm7gPWSEM5Fz7rMkByqx/bQ== [email protected]
将客户端(120)上产生的公钥发送给服务端(110):
在客服端上使用命令:
ssh-copy-id 192.168.145.110
#根据提示输入登录密码即可
此时在服务端(110)的/root/.ssh/文件下产生如下文件:authorized_keys
cat authorized_keys
#存放的就是刚刚在客户端生成的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAsV0/rduydPp2HSxXAexYZPVKG4d5xrfyv+uJlFz4A5IhSrpoDPSZI525WlzEnYyuGs7xz
OUzbI3Nc81Va0/7rzZyZtP1JY5LYTRA02b3YH+1nokXIsFaqfc1NTcEN2DtoFzy0XfPVLLtnnRHqrEsDlDf49v3sRwQSXbclFh6QPQ7D6
y05VQWbYf2XzoEy4kqiFYoj21ketQytx/OAfzb1dfAINLSZIcOl4ceXGa7FssU63b0rU9Y2NK7Wo/q9w1z0+wGcMvN0pLSeNieet/WmAx
Hvzqw7CmAsEELuuBsecsip67L0puzfVMh7SJtQWqmm7gPWSEM5Fz7rMkByqx/bQ== [email protected]
在客户端(120)的/root/.ssh/文件下产生如下文件:known_hosts
注意:此时使用名ssh-copy-id 到服务端是,服务端的ssh配置文件sshd_config中是否允许输入密码项必须为yes。否则客户端连不上服务端
PasswordAuthentication yes
使用ssh远程服务端:
ssh 192.168.145.110
#根据提示输入密码:
#此密码为客户端使用命令ssh-keygen是生成的公钥密码确认执行qian123456 不是服务端root用户的登录密码
第一步下载puttygen
第二步生成公钥和私钥:参考生成方式:puttygen生成公钥私钥
注意:生成过程中的key passphase不用写;key comments可以写用户表示自己的公钥;也就是公钥最后一部分内容
第三步将生成的公钥和私钥保存下来;
注意:公钥需要追加到服务端110的/root/.ssh/authrized_keys文件后; 私钥在使用putty连接远程服务端是需要导入到putty Connection SSH Auth下