[RH124] 11-SSH、VNC

1.远程连接

telnet、rlogin:都是明文的方式。不安全。

ssh:secure shell。加密的,提供安全性。

2.使用

在Windows下主要使用Putty、secureCRT、xshell作为远程客户端。

在Linux下一般直接使用Linux终端作为远程客户端。

 

ssh server_ip:使用ssh命令,参数为需要链接的服务器地址。不指定用户名的情况下,默认使用当前用户登录。如果客户端当前的用户在服务器上不存的话,就无法登录。

例如: [root@client ~]# ssh 192.168.1.11 ,默认使用root登录远程服务器192.168.1.11。

客户端:每次登录到远程服务器,客户端都要保存远程服务器的公钥。公钥保存在 ~/.ssh/known_hosts 里。

服务器:每次有客户端登录,都会发送公钥给客户端。

公钥:公钥在每次客户端远程登录服务器时由服务器发送给客户端。公钥保存在服务器的什么位置呢?/etc/ssh/ssh_host_ecdsa_key这个文件中。如果删除后,重启sshd服务,它会自动重新生成。

 

实验解决无法远程登录:

在服务器公钥重新生成后,客户端再次链接时(以前链接过,保存了服务器老的公钥),会提示服务器公钥已经改变,链接失败。

1)需要删除客户端 ~/.ssh/known_hosts 里老的公钥。

2)重新登录服务器,保存新的公钥。

 

指定用户登录服务器:

 ssh root@192.168.1.66ssh -l root 192.168.1.66 :以root用户登录远程服务器192.168.1.66。

 

客户端编码:

我们使用SecureCRT时,默认字符编码不是UTF-8

我们登录到服务器上后,使用 echo $LANG 查看系统编码:

所以,如果存在中文等字符的话,客户端上会显示乱码,这时我们需要把客户端(CRT)的字符编码设置为UTF-8,从而解决乱码问题。

3.图形化界面

xclient:例如firefox等图形应用就是一个xclient。

xserver:是xclient生存的土壤。

X:以前的窗口界面为Window简称W,更新后,W字符后面是X,所以以X作为图形化界面的标识。X有很多版本,从X1开始到现在的X11,图形化界面我们就称之为X或X11.

 

实验:

客户端机器和服务器机器上都安装有图形化界面。理论上都是有xserver的。

那么,我们在client上使用ssh链接到server。执行firefox &,提示Error:no display specified

这是为什么呢?原因是ssh默认只支持传输字符信息,而无法传输xclient信息。

解决方法:

在ssh链接时,使用-X选项: ssh root@192.168.1.66 -X 。这样我们就可以在client上打开server上的图形化应用,例如 system-config-users &  

 

实验2:

客户端机器有图形化界面,服务器机器没有图形化界面(最小安装)。我们在服务器上安装了firefox。

那么我们想在客户端机器上使用ssh root@192.168.1.66 -X,然后打开服务器的firefox,也会提示错误。

事实上,我们要远程打开xclient有三个条件:

1)client服务器必须要有xserver。

2)ssh支持传输xclient,也就是要在链接时使用-X选项。

3)服务器要允许远程运行xclient,需要安装xorg-x11-xauth.x86_64

 

在Windows下如果远程运行图形化界面:

在Windows下要远程运行xclient,同样要满足上述三个条件。

1)Windows上要安装xserver:常用的有xmanager和xming,前者收费,后者开源。

xshell单独安装可能出问题,可以安装xmanager企业版自带xshell。

2)在xshell中勾上转发X11链接到xmanager。

3)服务器要有xserver或安装xorg-x11-xauth.x86_64。

4.SSH秘钥认证及安全管理

SSH登录认证有两种方式:

1)密码认证:输入远程服务器对应用户的密码。例如ssh root@192.168.1.66,要求输入该机器root密码。

2)秘钥认证。

 

关于加密的一些知识:

加密方式三种:

  1.对称加密:不讨论。

  2.哈希函数:不讨论。

  3.非对称加密:

    公钥:可以公开的。

    私钥:自己独有的(必须保存好)。

 

数据加密原理:如下图

目的:A机器和B机器互相都是可信的,A机器想发数据给B机器。加密解密步骤如下:

1)B机器先产生一对秘钥,包含公钥和私钥。

2)B机器把公钥给A机器。

3)A机器用B机器给的公钥加密要传输的数据。

4)把加密后的数据发送到B机器。

5)B机器用私钥解密数据。

6)B机器获取到A发送的原始数据。

5.免密登录

实验(B机器远程登录A机器不需要密码)

目的:Client通过ssh免密码登录到Server。

Client相当于原理图中的B机器,Server相当于原理图中的A机器。

1)Client产生一对秘钥:

ssh-keygen

第一个红框处:确认将私钥保存在~/.ssh/id_rsa中。

第二个红框处:可以输入保护私钥的密码。直接Enter默认不输入。

2)查看~/.ssh/

id_rsa:保存私钥。

id_rsa_pub:保存公钥。

3)将公钥发送给Server保存:

ssh-copy-id root@192.168.1.68自动将~/.ssh/id_rsa_pub的内容发送给Server,想要免密码登录哪个用户就发给哪个用户。例如想免密码登录bob用户,就ssh-copy-id bob@192.168.1.68。

4)Server收到公钥后,保存在相应用户的~/.ssh/authorized_keys文件中,占用一行。

红框里的root@host67,表示这个公钥来自host67客户端的root用户。

5)现在Client就可以免密码登录Server了。

免密码登录的原理:

前提:已经完成上述的免密码操作(ssh-keygen + ssh-copy-id)。

1)客户端在使用ssh登录时会把自己的公钥发送给服务器的root用户。

2)服务器拿到公钥,于自己~/.ssh/authorized_keys文件中的公钥进行对比,如果不正确,就要求客户端输入密码,如果正确,则进一步验证。

3)如何进一步验证呢?Server用这个验证后的公钥加密一个字符(或其他内容),然后发给Client,让他用私钥解密,然后再把解密后的字符回传给Server,Server如果对比这个字符是正确的,就说明这个公钥确认是这个Client的。那么验证通过,以后不需要密码。

 

为什么要保护要私钥:

如果不保护好私钥,另一台假冒的Client可以偷取id_rsa和id_rsa.pub。然后就可以无密码访问Server了。

在执行ssh-keygen生成秘钥对时,可以设置私钥保护密码。在做好免密码登录后,登录时不会要求输入Server用户密码,但是会让你输入私钥保护密码

 

服务器设置不允许root远程登录:

1)在Server端的/etc/ssh/sshd_config中:

修改PermitRootLogin no。默认是yes的。

2)重启systemctl restart sshd。

3)尝试使用ssh root@192.168.1.68登录。

4)发现做了免密登录后,同样要求输入root密码,而且密码输对了也无法登录。

 

服务器关闭秘钥认证:

1)在/etc/ssh/sshd_config中:

修改PubkeyAuthentication no。默认为yes。

2)重启sshd服务。

3)尝试使用ssh root@192.168.1.68登录。

4)发现做了免密登录后,同样要求输入root密码。

 

服务器关闭密码认证:

1)在/etc/ssh/sshd_config中:

修改PasswordAuthentication no。默认为yes。

2)重启sshd服务。

3)尝试使用一个未做免密登录的用户使用ssh root@192.168.1.68登录。

4)发现只要未做免密登录,就直接被拒绝登录。

6.VNC

远程桌面协议:

  • windows->rdp
  • xendesktop->ICA
  • vmware view->PCoIP
  • Linux->vnc/spice

配置步骤:

1)设置关闭防火墙

 firewall-cmd --set-default-zone=trusted 

2)安装VNC

 yum install *vnc* -y 

3)第一次链接,设置密码

 vncserver 

这里输入的密码,就是以后链接远程桌面时的密码。

该密码保存在 ~/.vnc/passwd 文件里。

修改密码: vncpasswd 

4)查看桌面编号

 vncserver -list 

5)在windows主机上安装vnc viewer。

6)安装完毕后,链接192.168.1.67:1。

输入先前设置好的vnc密码,就可以登录桌面了。

 

管理桌面服务:

 vncserver -kill :1 :关闭1号桌面。

 vncserver -geometry 680x480 :2 :开启2号桌面,分辨率是680*480(如果服务器是虚拟机貌似不生效)。

如果指定编号开启vnc,发现开启的编号和指定的编号不一致,可以这么解决:

删除 /tmp/.X11-unix 里的文件。

 

我们默认使用vncserver :n来共享的桌面于用户远程链接看到的桌面画面是不同步的。

如果我们要想展示同步的画面(我在本地操作,别人看到的也是这个画面),我们使用一下命令:

x0vncserver --passwordfile=~/.vnc/passwd --AlwaysShared --AcceptPointerEvents=0 --AcceptKeyEvents=0

命令解释:

x0vncserver:共享当前会话。
--passwordfile=~/.vnc/passwd:使用~/.vnc/passwd文件中的密码作为密码。
--AlwaysShared:强制客户端共享,这样就可供多用户连接,而不是一个用户顶掉另一个用户。
--AcceptPointerEvents=0:禁止用户鼠标操作。
--AcceptKeyEvents=0:禁止用户键盘操作。

 

Linux桌面自带的vnc客户端:

打开Remote Desktop Viewer。

同样连接远程机器IP地址(192.168.1.67为当前会话界面,192.168.1.67:1为1号桌面)。

 

posted @ 2020-03-20 14:48  风间悠香  阅读(500)  评论(0编辑  收藏  举报