ssh免密登陆

https://www.cnblogs.com/lingyejun/p/7367596.html

https://baike.baidu.com/item/SSH/10407

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题

ssh口令验证登录

ssh user@ip

执行上面的命令,接下来输入登录密码就可以完成登录。

这种方式登录时,ssh进行口令验证的一个流程为:

  • 客户端与服务器建立上连接,服务器将自己的公钥传给客户端
  • 客户端拿到服务器的公钥后,将登陆密码用公钥加密后传给服务器
  • 服务器拿到加密后的登陆密码后,用自己的私钥解密登陆密码,密码验证通过后则允许客服端登陆

由于登陆过程中的数据传输都被加密,用这种方式远程登陆是相对安全的。但是这种方式不能保证正在连接的服务器是自己想要连接的服务器,可能会受到”中间人”攻击,即有别的服务器冒充真正的服务器。

ssh密钥登陆

  • 首先客户端生成自己的公钥和私钥:
ssh-keygen -t rsa

在客户端用户目录下可以看到一个.ssh/文件夹,其中id_rsa就是私钥,id_rsa.pub是公钥,known_hosts记录已知的公钥清单。

  • 服务器端需要在.ssh/文件夹下创建authorized_keys文件,将客户端的公钥追加到服务器端的authorized_keys文件中:
scp -p ~/.ssh/id_rsa.pub user@ip:/home/user/.ssh/authorized_keys

或者直接将公钥中的内容拷贝到authorized_keys文件中

  • 服务器端的文件权限:

authorized_keys文件权限至少为600(可读写):

chmod 600 authorized_keys

.ssh目录权限至少为700(可读写执行):

chmod 700 -R .ssh

配置完成后就可以进行免密连接了:

ssh user@ip [-p[port]]

或者进一步配置config文件(没有的话就新建一个):

Host    别名
    HostName        主机名
    Port            端口
    User            用户名
    IdentityFile    私钥路径

可以按照以上写法同时配置多个ssh会话。

配置完成后就可以方便的进行免密登陆:

ssh 别名

这种登陆方式的流程是:

  • 客户端向服务器端发送请求,将自己的公钥发送给服务器
  • 服务器收到请求后,在主目录下寻找客户端的公钥,并与发送过来公钥对比,如果一致,则用公钥加密”质询”(challenge)并发送给客户端
  • 客户端收到”质询”后,就可以用自己的私钥解密”质询”,再发送给服务器
  • 服务器验证”质询”通过后,就允许客户端登陆

这种密钥验证的方式可以避免”中间人攻击”(因为他没有你的私钥)。