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.66(ssh -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号桌面)。