zoukankan      html  css  js  c++  java
  • [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号桌面)。

     

  • 相关阅读:
    关于mysql无法添加中文数据的问题以及解决方案
    如何在Eclipse中使用tomcat9 运行servlet开发简单的动态网页?
    Eclipse新建Servlet时候,不会自动生成mapping到web.xml,而是在代码中加入注解@WebServlet
    win10 Tomcat9.x控制台乱码问题解决
    命令行键入命令时,几个比较常用的快捷键
    Mesh Filter & Mesh Render
    Java路径
    Java复制数组的四种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRange()方法
    static class 静态类(Java)
    Java将文件转为字节数组
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/12531699.html
Copyright © 2011-2022 走看看