我的环境:
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