ssh的应用和vnc连接桌面

Easter79
• 阅读 507

一、什么是ssh?

1、SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。SSH之所以能够保证安全,原因在于它采用了公钥加密。

2、SSH是传输层和应用层上的安全协议,它只能通过加密连接双方会话的方式来保证连接的安全性。当使用ssh连接成功后,将建立客户端和服务端之间的会话,该会话是被加密的,之后客户端和服务端的通信都将通过会话传输。

3、SSH服务的守护进程为sshd,默认监听在22端口上。

4、所有ssh客户端工具,包括ssh命令,scp,sftp,ssh-copy-id等命令都是借助于ssh连接来完成任务的。也就是说它们都连接服务端的22端口,只不过连接上之后将待执行的相关命令转换传送到远程主机上,由远程主机执行。

5、ssh客户端命令(ssh、scp、sftp等)读取两个配置文件:全局配置文件/etc/ssh/ssh_config和用户配置文件~/.ssh/config。实际上命令行上也可以传递配置选项。它们生效的优先级是:命令行配置选项 > ~/.ssh/config > /etc/ssh/ssh_config。

ssh服务端配置文件为/etc/ssh/sshd_config,注意和客户端的全局配置文件/etc/ssh/ssh_config区分开来。

[root@localhost ~]# ls /etc/ssh/
moduli  ssh_config  sshd_config  ssh_host_ecdsa_key  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key  ssh_host_ed25519_key.pub  ssh_host_rsa_key  ssh_host_rsa_key.pub
[root@localhost ~]#

6、ssh涉及到两个验证:主机验证和用户身份验证。通过主机验证,再通过该主机上的用户验证,就能唯一确定该用户的身份。一个主机上可以有很多用户,所以每台主机的验证只需一次,但主机上每个用户都需要单独进行用户验证。

7、ssh支持多种身份验证,最常用的是密码验证机制和公钥认证机制,其中公钥认证机制在某些场景实现双机互信时几乎是必须的。虽然常用上述两种认证机制,但认证时的顺序默认是gssapi-with-mic,hostbased,publickey,keyboard-interactive,password。注意其中的主机认证机制hostbased不是主机验证,由于主机认证用的非常少(它所读取的认证文件为/etc/hosts.equiv或/etc/shosts.equiv),所以网络上比较少见到它的相关介绍。总的来说,通过在ssh配置文件(注意不是sshd配置文件)中使用指令PreferredAuthentications改变认证顺序不失为一种验证的效率提升方式。

8、ssh客户端其实有不少很强大的功能,如端口转发(隧道模式)、代理认证、连接共享(连接复用)等。

9、很重要却几乎被人忽略的一点,ssh登录时会请求分配一个伪终端。但有些身份认证程序如sudo可以禁止这种类型的终端分配,导致ssh连接失败。例如使用ssh执行sudo命令时sudo就会验证是否要分配终端给ssh。

二、非对称加密基础

1、对称加密:

加密和解密使用一样的算法,只要解密时提供与加密时一致的密码就可以完成解密。例如QQ登录密码,银行卡密码,只要保证密码正确就可以。

2、非对称加密:

通过公钥(public key)和私钥(private key)来加密、解密。公钥加密的内容可以使用私钥解密,私钥加密的内容可以使用公钥解密。一般使用公钥加密,私钥解密,但并非绝对如此,例如CA签署证书时就是使用自己的私钥加密。在接下来介绍的SSH服务中,虽然一直建议分发公钥,但也可以分发私钥。

所以,如果A生成了(私钥A,公钥A),B生成了(私钥B,公钥B),那么A和B之间的非对称加密会话情形包括:

(1).A将自己的公钥A分发给B,B拿着公钥A将数据进行加密,并将加密的数据发送给A,A将使用自己的私钥A解密数据。

(2).A将自己的公钥A分发给B,并使用自己的私钥A加密数据,然后B使用公钥A解密数据。

(3).B将自己的公钥B分发给A,A拿着公钥B将数据进行加密,并将加密的数据发送给B,B将使用自己的私钥B解密数据。

(4).B将自己的公钥B分发给A,并使用自己的私钥B加密数据,然后A使用公钥B解密数据。

虽然理论上支持4种情形,但在SSH的身份验证阶段,SSH只支持服务端保留公钥,客户端保留私钥的方式,所以方式只有两种:

客户端生成密钥对,将公钥分发给服务端;服务端生成密钥对,将私钥分发给客户端。只不过出于安全性和便利性,一般都是客户端生成密钥对并分发公钥。后文将给出这两种分发方式的示例。

二、ssh的验证方式

1、 密码验证

直接输入用户名和密码进行登陆

2、 密钥验证

数据加密:公钥加密,私钥解密

ssh

语法:

ssh 主机名/IP(使用当前用户登录)

当我第一次连接某个主机的时候,系统会提醒我,是否要记录这个主机的公钥指纹,目标服务特有的东西

# ssh 192.168.2.135

[root@tracker1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:eb:05:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.134/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feeb:5b3/64 scope link
       valid_lft forever preferred_lft forever
[root@tracker1 ~]#
[root@tracker1 ~]# ssh 192.168.2.135
The authenticity of host '192.168.2.135 (192.168.2.135)' can't be established.
ECDSA key fingerprint is e0:84:42:4f:a6:75:83:c0:39:37:d8:aa:e4:da:be:f6.
Are you sure you want to continue connecting (yes/no)?

判断的方法是读取~/.ssh/known_hosts文件和/etc/ssh/known_hosts文件,搜索是否有192.168.2.135的主机信息

如果没有搜索到对应该地址的host key,则询问是否保存主机B发送过来的host key,如果搜索到了该地址的host key,则将此host key和主机B发送过来的host key做比对,如果完全相同,则表示主机A曾经保存过主机B的host key,无需再保存,直接进入下一个过程——身份验证,如果不完全相同,则提示是否保存主机B当前使用的host key。

[root@tracker1 ~]# ssh 192.168.2.135
The authenticity of host '192.168.2.135 (192.168.2.135)' can't be established.
ECDSA key fingerprint is e0:84:42:4f:a6:75:83:c0:39:37:d8:aa:e4:da:be:f6.     #公钥指纹
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.135' (ECDSA) to the list of known hosts.
root@192.168.2.135's password:
Last login: Tue Jul  2 02:25:32 2019 from 192.168.2.135
[root@tracker2 ~]#

或者windows端使用图形界面ssh客户端工具时:

ssh的应用和vnc连接桌面

**查看主机A记录的公钥指纹
**

# cat .ssh/known_hosts

该文件中,每行一个host key

[root@tracker2 ~]# exit
logout
Connection to 192.168.2.135 closed.
[root@tracker1 ~]#
[root@tracker1 ~]# ls .ssh/
known_hosts
[root@tracker1 ~]#
[root@tracker1 ~]# cat .ssh/known_hosts
192.168.2.135 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJLQ0tEV5MrvuQ/cAOorvDY19jy/egXiUNceSoRjVw1lRvFohd5x+oIfE0gUTs9E1Ho4hGQJ/yaqRILmlUkLoYc=
[root@tracker1 ~]#

综上所述,在主机验证阶段,服务端持有的是私钥,客户端保存的是来自于服务端的公钥。注意,这和身份验证阶段密钥的持有方是相反的。****

连接到指定的远程用户名

# ssh -l djl 192.168.0.56

ssh的应用和vnc连接桌面

 # ssh djl@192.168.0.56

ssh的应用和vnc连接桌面

记录这个主机的公钥指纹的位置

ssh的应用和vnc连接桌面

ssh配置文件、公钥、私钥的位置

ssh的应用和vnc连接桌面

删除生成新的公钥指纹

ssh的应用和vnc连接桌面

再次连接,原来的公钥指纹失效

ssh的应用和vnc连接桌面

删除原来的公钥指纹

# rm -rf .ssh/*

 ssh的应用和vnc连接桌面

要是想打开远程图形化界面的话,条件:

ssh客户端:

1、 有xservice

2、 开启x11转发

ssh服务器:

1、 安装xorg-x11-xauth

2、 xclient

查看ssh服务器是否安装xorg-x11-xauth

# rpm -qa | grep xauth

ssh的应用和vnc连接桌面

开启X11转发

# ssh 192.168.0.56 -X

ssh的应用和vnc连接桌面

对称加密:

公钥

私钥

非对称加密:

数字签名

生成一个密钥对

# ssh-keygen

ssh的应用和vnc连接桌面

查看

私钥:

id_rsa

公钥:

id_rsa.pub

ssh的应用和vnc连接桌面

发送公钥

# ssh-copy-id -i id_rsa.pub root@192.168.0.56

ssh的应用和vnc连接桌面

 查看保存公钥的位置

ssh的应用和vnc连接桌面

 无密登录实现

ssh的应用和vnc连接桌面

 VNC的应用

 ssh的应用和vnc连接桌面

查看vnc工具包是否安装

 # yum list *vnc*

ssh的应用和vnc连接桌面

 安装VNC服务

 # yum install tigervnc-server.x86_64 -y

 ssh的应用和vnc连接桌面

设置密码 

# vncserver 

ssh的应用和vnc连接桌面

密码保存位置

# ls .vnc/

# vncserver -list

ssh的应用和vnc连接桌面

修改vnc的密码

#vncpasswd

ssh的应用和vnc连接桌面

关闭1号桌面

# vncserver -kill :1

ssh的应用和vnc连接桌面

开启3号桌面

# vncserver :3

ssh的应用和vnc连接桌面

ssh的应用和vnc连接桌面

缩放桌面

ssh的应用和vnc连接桌面

如果多个人同时连接,一定要打开共享连接

ssh的应用和vnc连接桌面

ssh的应用和vnc连接桌面

ssh的应用和vnc连接桌面

同步服务器桌面 ,在客户端上面就不需要指明桌面了

# x0vncserver --passwordfile=.vnc/passwd

实验失败,为解决

参考博客:

https://www.cnblogs.com/f-ck-need-u/p/7129122.html

https://www.cnblogs.com/youngerger/p/9104144.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
SSH概述与配置文件说明
一、什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。在出现SSH之前,系统管理员需要登入远程服务器执行系统管理任务时,都是用telnet来实现的,telnet协议采用明文密码传送,在传送过程中对数据也不加密,很容易被不怀好意的人在网络上监听到密码。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
SSH公钥免密登录其他主机
在多台主机之间使用SSH免密登录,假设主机A免密登录主机B:1\.在主机A上生成自己的ssh公钥:root@A~sshkeygentrsa执行上面命令,一路回车,完成后,会在~/.ssh目录下生成2个文件:id\_rsa(私钥)和id\_rsa.pub(公钥)2\.将主机A上生成的公钥
Easter79 Easter79
2年前
ssh连接服务器
1.概述ssh是一种网络通信协议,用于计算机之间的加密登录.一般用ssh连接服务器有两种方式:密码认证与密钥认证.密码认证就是通过传统的输入密码的方式登录,密钥认证就是把产生的公钥注册到服务器后,用私钥登录,这样就可以不用每次登录输入密码.特别适合作者这种脑残记不住密码的懒人.2.密码认证密码认证登录直接在终端使用ssh
Stella981 Stella981
2年前
Git使用总结
生成密钥1.打开GitBash,运行  \_sshkeygen  \_2.密钥生成空间\_~/.ssh/id\_rsa  \_(C:/User/.ssh)3.输入密码(不输入增直接回车跳过)4._~/.ssh/id\_rsa.pub_ (公钥), _id\_rsa_ (私钥)下载代码到本地
Stella981 Stella981
2年前
Linux应急响应(一):SSH暴力破解
0x00前言SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。SSH口令长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,容易被攻击者破解,一旦被攻击者获取,可用来直接登录系统,控制服务器所有权限。0x01应急场景某天,网站
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k