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

原文地址:https://www.cnblogs.com/Alexkk/p/11943990.html