首先,ssh的数据传输是对称加密的,加密算法需要一个密钥对数据进行加密解密。
对称密钥由客户端生成,使用服务器端发送来的公钥加密(由于体系原因,这个公钥的正确性必须由客户端自行确认,于是在第一次会话时要求确认是否信任服务器发来的公钥)。之后发送给服务器。由非对称加密的原理,只有服务器使用私钥才可对对称密钥进行解密。
非对称加密的原理:公钥加密只能私钥解密,私钥加密只能公钥解密。
一、linux下ssh命令的身份认证
登陆时使用用户名密码进行登陆显然不能满足高级别的保密需求。使用密钥进行登陆不仅使远程连接更加安全而且当在两机之间建立了密钥登陆机制后就不再需要使用密码登录而更加便捷。这种验证方式是基于非对称加密实现的。具体内容不做解释。
基本方式是:
1、创建一对公钥和私钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N 'passwd'
-t指定密钥产生算法
-f指定生成文件,登陆是使用ssh命令进行的,而他的配置文件默认的私钥为家目录下.ssh/id_rsa
-N对私钥加密以防止私钥泄露后他人乱用,但这也使得以后每次登陆必须输入-N指定的密码。
2、传将公钥的内容附加到指定用户的authorized_keys后。
id_rsa.pub里面的内容是需要附加到你要远程连接的服务器上的用户的家目录下的.ssh目录下的authorized_keys的。
在认证时,客户端会使用私钥对服务器发来的一些数据进行加密。而服务器端使用公钥钥解密,如果成功就直接认证通过。
实现:
将pubkey里面的内容附加到要远程连接的UNSERBANE@RENOTHOST的家目录下的.ssh目录下的authorized_keys后,注是附加而不是覆盖!使用ssh-copy-id可直接完成。
ssh-copy-id -i /path/to/pubkey UNSERBANE@RENOTHOST
-i 指定要发送的公钥
UNSERBANE@RENOTHOST 用户名和主机名
上传公钥是需要用户密码的,之后基于密钥登陆再也不用输入test的密码。
3、进行登陆
ssh -i /path/to/privatekey -l USER ADDR
-i指定私钥位置
-l指定用户名
ADDR指定链接地址端口号默认为22。自己选定方式ADDR:PORT
二、windows下使用xshell进行密钥登陆
1、创建一对公钥和私钥
新建用户密钥生成向导
选项,RSA功能较DSA更强大。密钥适度选择长度。
生成中。
对其选择是否加密。
公钥另存为。
2、传将公钥的内容附加到指定用户的authorized_keys后。
这里可以通过使用xshell先登陆服务器自行将产生的公钥对authorized_keys进行附加。
3、进行登陆
选择公钥登陆。
登陆成功。
远程登陆安全性的几点建议:
不用22端口;
限定主机登陆;
限定vpn登陆;
基于密钥登陆而不是口令;
禁止管理员直接登陆;
仅允许有限用户登录。
这些内容都可以在ssh服务器端的配置文件中进行修改。
文件:只列出部分,其余请自行参考。
/etc/ssh/sshd_config
Protocol 2 #协议版本最好是2
PubkeyAuthentication yes #公钥登陆
#AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no #禁止密码登录
原文链接:https://blog.csdn.net/qq1436248562/article/details/45854779