远程:
*在日常使用中,windows系统可以使用远程桌面来管理远程的windows操作系统
*而在Linux上,可以使用openssh套件来进行管理(默认安装)
在openssh上是使用安全加密的套接字通信方式
openssh:
openssh是一个典型的C/S架构,同时拥有openssh-clent客户端以及openssh-server服务端,如下所示:
通过ssh登陆:
ssh [email protected]
#或者
ssh -X [email protected]
#ssh -X 是用来转发X11的显示协议(一些GNOME/KDE等图形化的软件都是基于 X11的窗口来进行的开发)
#X11 的变量保存在 DISPLAY=:0中,其中默认为0是代表的显示器
#或者
ssh 用户名@ip ‘执行的命令’
#表示仅仅只是远程执行命令,并不登录系统
#所以从这里可以看出,使用ssh连接对方机器的格式为“用户名@对方机器的ip地址“或者ip地址也可以替换为主机名,但是需注意,如果是主机名那么这个主机名一定要可以解析为ip地址(如对方主机名无法正常解析,可通过绑定/etc/hosts 来指定主机名解析ip)
#并且,第一次连接,需要接收对方的主机公钥才可以正常连接
通过ssh来进行文件传输:
ssh的文件传输功能是通过scp来做,而scp则是利用了ssh的远程通道来实现的文件传输
scp常见的用法:
将本机的文件拷贝到远程服务器
格式:scp 本地的目录/文件 用户名@远程主机:/路径
scp nginx-1.25.1.tar.gz [email protected]:/tmp
将远程的文件拷贝到本机的opt/
scp [email protected]:/tmp/nginx-1.25.1.tar.gz /opt
一些常见操作:
#拷贝目录 -r
scp -r /opt [email protected]:/tmp #-r 选项则为目录
#保留时间戳和权限 -p
scp -rp /opt [email protected]:/tmp/opt1
#指定端口号 -P (ssh默认使用22作为标准端口==生产环境一般不会使用22端口,安全第一)
scp -P 1111 1.txt [email protected]:/tmp
### scp 中 -P 为指定端口号 ssh 中 -p 为指定端口号
# 压缩传输 -C ==》提升传输性能
scp -P 1111 -C 1.txt [email protected]:/tmp
#推荐在数据量较大的情况下使用,因为压缩操作本身就会占用一定时间,如果数据量并不大,那么效果可能不如不压缩
rsync 远程同步:
#rsync通常用在linux系统之间或本机与系统之间复制和同步文件。rsync优势就是可以按照需求去更新目标文件夹,只去复制已更改或新增的文件,也可以删除源文件夹中已不存在的文件。
本地用法:rsync 选项 源路径 目标目录
rsync -a /tmp/ /test/
#在rsync 中 a = archive 表示归档模式,在该模式传输时会保持文件的所有属性
#和权限,包括时间戳,用户权限等等,并且该模式还会递归去复制子目录和文件,保
#持他们的所有属性不变
远程用法:rsync 选项 源路径 目标目录
#将本地同步到对端
rsync -r /opt [email protected]:/tmp
#-r 代表同步目录,后面接的是目录文件,并且默认不会同步链接文件
#如果需要同步链接文件,可以使用 --links 或者 -l 参数来实现
#从对端同步到本地
rsync -a [email protected]:/tmp/ /opt/
#如果对端为非22标注端口同步方式
rsync -a -e 'ssh -p 1111' [email protected]:/tmp /tmp
#注:在使用rsync同步时,需要注意源路径的两种写法:
1,/opt 表示同步目录本身
2,/opt/ 表示同步目录下的文件
#常用选项
-v:显示rsync传输过程的的详情,使用 -vvv 获取的信息将会更详细
-n:测试传输,但不实际传输
-a:归档模式,传递并保留文件属性
-t:保持mtime属性
-o:保持owner属性
-g:保持group属性
-p:保持perms属性(不包括特殊权限)
-D:是“--device --specials”选项的集合,表示拷贝设备文件和特殊文件
-l --links:如果文件是软连接则拷贝软连接本身
-z:传输时进行压缩
--delete:已源文件为主,对目标文件进行同步。少补多增。
--existing:只更新目标端已存在的文件,如果文件不存在,则不传输
--ignore-existing:与 --existing 相反,只更新目标端不存在的文件
--remove-source-files:删除源端已成功传输的文件
ssh的认证方式:
#在ssh的认证方式中,主要为两种,第一种为密码认证,第二种为秘钥认证,这两种所使用的认证方式统一为非对称加密来进行认证
在目前场景,所有的远程密码都是进行过加密的(防止被抓包获取到信息),如下图所示,所使用的为SSH第二代加密验证方式(第一代有BUG。。。可以导致秘钥被重置):
加密的方式:
1、对称加密
秘钥(加密的介质)+ 编码的方式(算法)==》一起进行传输 == 对称加密(秘钥加密)
此类方法在目前场景中很容易被中间人盯上,一般出现在网段内部等等。。
弊端:加密和解密所使用同一把秘钥
2、非对称加密
源端:只有公钥 (加密的介质)
目标端:拥有公钥+私钥(解密的介质)
源端向目标端发起需要发送内容的请求,目标端会传递给源端公钥(指纹信息)
源端:公钥加密消息内容 ==》传输到目标端 ==》目标端通过私钥解密
注:公钥只能进行加密,无法进行解密,所以即使中间人获取到了公钥以及加密后的消息也无意义
#如上图所示,首次ssh远程链接会发送给对端ECDSA的公钥,也叫指纹信息,而加密方式(编码方式)则为 SHA256 的算法
#公钥以及私钥存放位置为 /etc/ssh 下,如上图所示 ssh_host_ecdsa_key 为私钥,ssh_host_ecdsa_key.pub 为公钥
#当首次链接输入yes确认链接之后,客户端就接收了服务端主机的公钥,而主机的公钥存放在用户家目录下 .ssh/know_hosts 文件中(每一行都是一个主机的公钥),接收完公钥,下次在ssh去链接主机时,则无需确认指纹信息(如果把该文件删除,则还需接受一次指纹信息,因为没有公钥无法进行加密)
注:实际上ssh每一次都会发送一次公钥,与你本机 .ssh/know_hosts 中的公钥去进行比对,如果你本机上的公钥进行了修改,那么会提示重新接收一次指纹信息,在.ssh/know_hosts 中重新生成一条公钥,如果没去修改则无需再次接收
秘钥认证(免密认证/ssh互信==》登录时不需要密码):
第一步:客户端需要生成一组公钥私钥(谁生成,谁保管)
ssh-keygen #其中保存位置如图所示在 .ssh/id_rsa.中
第二步:客户端发送自己生成的公钥给服务器
ssh-copy-id [email protected] #发送公钥时需要输入发送用户的登陆密码
#注:发送个了哪个用户,登陆哪个用户才不需要密码,登陆其他用户依然需要密码
#注:公钥默认保存在发送用户的家目录下 .ssh/authorized_keys 文件中,每个公钥单独占一行(公钥但凡有任何修改,则该公钥失效)
第三步:正常登陆就不需要秘钥了
#注注注:私钥谁生成谁保管,永远不会在公网中流通
标签:10,公钥,process,oss,linux,---,ssh,菜鸡,image From: https://blog.51cto.com/u_16170308/6838380