zoukankan      html  css  js  c++  java
  • SSH:putty通过SSH连接固定IP的虚拟机

    我的环境:

    win10

    vmware workstation:15.0.2 build-10952284

    ubuntu 18.04

    putty:0.73

    先来讲讲虚拟机如何设置固定IP吧,前提是你已经安装好了vmware和虚拟机。

    一 设置虚拟机能够通信

    本文采用NAT模式,设置虚拟机上网,桥接模式也大同小异。如果你的虚拟机通信正常,前面4步正常情况可以不用关注,直接进入5。

    1 在vmware界面检查虚拟机是否设置NAT模式:虚拟机->设置->网络适配器->勾选NAT:

    2检查vmware是否正常:编辑->虚拟网络编辑器:包含NAT模式

    3检查DHCP的五项功能是否正常开启:我的电脑->更多>管理->服务和应用程序->服务:

    4 检查vmware的虚拟网卡是否是自动获取IP:网络与共享中心->更改适配器设置->双击VMNet8->属性->IPV4->属性

    万事具备,只欠东风,进入主题:

     5 打开虚拟机,我们可以看到网络图标如下,显示正常,说明我们的虚拟机应该是能够通信的,如果你的网络不正常,请先检查1-4。为了确保ubuntu确实能够通信,可以看一下6,不愿意就跳到7。

    6 打开terminate:ifconfig,查看ip地址

    然后在windows下ping一下:window+R->cmd->ping 192.168.28.128,网络正常。

     7 虚拟机 关闭网卡/打开网卡,重新检查虚拟机的IP,两次IP不一定相同。显然如果每一次开机获得ip都不一样,会不利于我们的putty连接,或者其他连接,因此我们便要对Ubuntu设置固定IP

    8设置固定IP:从上至下依次点击:网络图标->下拉->wired settings->进入网络信息页面,记录IP,网关(Default Route),DNS,惊奇的是网关和DNS的ip是一样的,但是一想它们都通过一个虚拟网卡转发,所以也不奇怪了。

       

    点击IPV4->manul->填写IP,掩码,网关,DNS->APPLAY

    重复操作:关闭/打开网卡,重新检查IP,是否为设置的固定IP,然后在windows下ping一下ubuntu,ubuntu下ping一下windows,确保双方都能通信。

    如果windows能ping通ubuntu,ubuntu不能ping通windows,请检查一下,网关,网络掩码,ip是否填正确。

    9 putty 连接 Ubuntu:设置ip,名称,ssh连接,左边的属性设置(可选,包括字体,背景,颜色等),设置完之后,一定要选保存,然后点击open。

    9 保存公钥,open 之后会淡出一个密钥保存到信息,点击保存,稍后再详谈SSH的连接原理

    如果出错,先确认是否在虚拟机中安装openSSH-sever,如果没有安装

    请先执行:sudo apt-get install openssh-server

    并检查是否ssh启动:ps -e | grep ssh,如下就是ssh-sever启动正常。

    如果只有ssh-agent,没有sshd,则重启SSH服务:sudo /etc/init.d/ssh resart

    10 输入ubuntu的用户名和密码,就可以快乐的登陆ubuntu虚拟机了。

    11 putty 无密钥登陆虚拟机或者服务器,参考此链接,但是我提醒不用单独下载puttygen.exe,因为我们在下载putty时,已经包含了,打开putty所在目录就能看到。


    ssh的原理分析

    经过前面的使用,相信你已经对ssh的过程有了大概的了解,下面带你深入理解SSH中公钥和私钥的作用:

     步凑10的详解:

    • ssh-client发起登录请求,ssh-server把自己的公钥发给ssh-client,之前点击保存的文件就包含公钥。
    • client使用这个公钥,将自己的用户密码进行加密。
    • client将加密的密码发送给server。
    • server用自己的私钥,解密登录密码,比对解密的密码和用户密码是否一致。
    • 一致则通过,给client相应的响应。

    但是这样子会用一个问题:便会用中间人攻击,当客户端发起请求时,中间人冒充服务器给client发送自己的公钥,从而获取客户端的密码,后面中间人再利用客户端的账户和密码对服务端进行攻击。

    11 步凑详解

    • Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
    • Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R)
      ,然后将加密后信息发送给Client。
    • Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
    • Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
    • Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

    以上过程是server认证客户端,那客户端是如何认证server的呢?其实是在第一次登陆的时候,client就保存了server的信息,保存在host_key这个文件夹下:


    ssh常用配置

    服务器端:/etc/ssh/sshd_config
    客户端:/etc/ssh/ssh_config

    # vim  /etc/ssh/sshd_config


    1.限制root用户远程登录
       PermitRootLogin no


    2.通过控制用户访问限制 SSH 访问
           AllowUsers fsmythe bnice swilson
      DenyUsers jhacker joebadguy jripper

    3.不要支持闲置会话,并配置 Idle Log Out Timeout 间隔,当客户端连上服务器端后,若没有任何操作则,服务器端默认会

    每隔一定时间发送一个alive消息给客户端寻求客户端应答,默认一共发三次.若都没有回应,则断开连其中 
    #ClientAliveInterval设置每隔多少秒发送一次alive消息
    #ClientAliveCountMax 设置一共发多少次.
      ClientAliveInterval 600
    # (Set to 600 seconds = 10 minutes)
      ClientAliveCountMax 0

    4.禁用空密码:
      PermitEmptyPasswords no

    5.支持图形界面操作
      X11Forwarding yes

    6.登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !

      PrintMotd no

    7.显示上次登入的信息!可以啊!预设也是 yes !

      PrintLastLog yes  

    8.一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
    在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会有僵尸程序的发生!

      KeepAlive yes    

    9.每一个链接最多尝试验证的次数为这个值得一半,此外失败的信息还会记录在/var/log/message
      MaxAuthTries 默认值为6


    10. 是否对主机名进行dns解析(常用与没有固定IP只有域名的场合)
      UseDNS yes

     

    参考:

    详解SSH原理:https://www.jellythink.com/archives/555

    SSH原理之图文详解:https://blog.csdn.net/Aug0st/article/details/40324597

    图解SSH原理:https://www.jianshu.com/p/33461b619d53

  • 相关阅读:
    从汇编看c++中的placement operator new
    从汇编看c++的new和delete
    从汇编看c++中全局对象和全局变量
    javascript中的this
    好工具
    js压缩解压工具
    IE的documentMode属性
    77. sqlserver 锁表解决方式
    75. ID重新走过,备份表
    5. Java中序列化的serialVersionUID作用
  • 原文地址:https://www.cnblogs.com/Alexkk/p/11943990.html
Copyright © 2011-2022 走看看