21_linux笔记-ssh服务

文章目录


博客cpen_web

知识点1 公钥认证排错

1、确保公钥正确
2、确保~/.ssh/authorized_keys文件权限为600
3、确保家目录以及.ssh目录权限为755以下权限,即属组和其他人没有7的权限

示例

[root@cPen_web .ssh]# ssh -vvv wy@192.168.0.30		# 注:看ssh登录时的详细信息
#注:B机器下操作
[wy@cPen_web .ssh]$ vim authorized_keys			# 注:把A机器的公钥粘过去
[wy@cPen_web .ssh]$ chmod 600 authorized_keys 
[wy@cPen_web home]$ chmod 755 wy					# 注:公钥认证家目录其他人权限不能太高
[wy@cPen_web ~]$ chmod 755 .ssh					# 注:给.ssh也是755 权限

知识点2 登录方式

[root@cPen_web .ssh]# ssh wy@192.168.0.30
[root@cPen_web .ssh]# ssh 192.168.0.30 -l wy
[root@cPen_web .ssh]# ssh 192.168.0.30 -l wy -p 22	# 注:指定用户,指定端口(默认22号端口)
[root@cPen_web .ssh]# ssh -vvv 192.168.0.30 wy		# 注:查看登录过程的详细信息
…………
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /root/.ssh/id_ecdsa
debug3: no such identity: /root/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /root/.ssh/id_ed25519
debug3: no such identity: /root/.ssh/id_ed25519: No such file or directory
debug1: Trying private key: /root/.ssh/id_xmss
debug3: no such identity: /root/.ssh/id_xmss: No such file or directory
…………
#注:默认会去寻找~/.ssh/id_rsa,然后再找id_dsa等等...
#注:rsa  dsa  ecdsa  加密算法
#注:不接任何用户名,会以A机器上的当前用户去登录B机器上的同名用户(不管B机器有没有这个用户)
[sanchuang@cPen_web ~]$ ssh 192.168.0.30
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
sanchuang@192.168.0.30's password: 
[sanchuang@cPen_web ~]$ 

#注:登录时默认会去寻找家目录下的~/.ssh/id_rsa去进行认证,所有尽量不要在生成key的时候将它的默认路径更改

知识点3 登录验证原理 - 密码登录

1、密码登录
client向server发送登陆请求,server将自己的公钥发送给client
client使用这个公钥,将密码进行加密,发送给server
server用私钥解密登陆密码,验证合法性
server返回验证结果给client

这个流程有一个问题,怎么保证收到的公钥就是目标server的公钥?(中间人攻击)
如果一个攻击者中途拦截了client的登录请求,发送自己的公钥给client,client端就会用攻击者的公钥进行数据加密,攻击者接收到信息后,用自己的私钥就可以解密了,这就窃取了client的登陆信息了

为了解决这个问题,client端第一次登录的时候,会进行一个公钥确认

确认server服务端的这个host主机摘要,确认成功之后就会将server端的pubkey保存在~/know_hosts里面
以后每次连接都会验证这个know_hosts里的key和收到的pubkey是否一致

server主机的pubkey保存在/etc/ssh/目录下,默认使用ssh_host_ecdsa_key.pub

#注:SSH基于公钥加密的技术
登录验证原理 - 密码登录
#注:第一步A机器向B机器发送登录请求(还没有道输入密码的阶段)
#注:B机器接收到A机器的请求之后,把B机器的公钥发送给A机器
#注:A机器拿到公钥之后,用公钥对密码进行加密(密码是密文,不能让别人知道)
#注:A机器把加好密的这一串密文发给B
#注: B机器收到来此A机器的机密之后的密码,用私钥解密,得到passwd,再与/etc/shadow密码进行比较验证是否通过
#注:B机器向A机器返回登陆结果(成功或者失败)
#注:密码登录涉及公钥加密,ssh整个都设计公钥加密(无论是密码登录或公钥登录)
#注:没有保证第3方人攻击

#注:公钥加密私钥解密、私钥加密公钥解密(为了区分后面+.pub)
#注:成对存在成对加解密

#注:第一次登录机器时,一般会要输入yes(是否信任B主机),然后把key放到know_hosts里面
A机器下

[root@cPen_web .ssh]# ssh 192.168.0.30 -l wy -p 22
………………
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
………………
[root@cPen_web .ssh]# cat known_hosts 
192.168.0.30 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBO+Xv/RYitaOHx0iyAbcOXLIPZEn75xh94pJ2L+MWOV/V3YRezYCgHJSwAJm5N9ceqtYCKoXUL3cCJeuGiiDH0A=

B机器下

[root@cPen_web .ssh]# cd /etc/ssh				# 注:ssh服务的配置文件
[root@cPen_web ssh]# ls
moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_ecdsa_key  ssh_host_ed25519_key    ssh_host_rsa_key
[root@cPen_web ssh]# cat ssh_host_ecdsa_key.pub 	# 注:默认使用ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBO+Xv/RYitaOHx0iyAbcOXLIPZEn75xh94pJ2L+MWOV/V3YRezYCgHJSwAJm5N9ceqtYCKoXUL3cCJeuGiiDH0A= 
#注:A机器保存的key就是B机器/etc/ssh/ssh_host_ecdsa_key.pub下面的
#注:A机器生成的公钥就是B机器/etc/ssh/ssh_host_ecdsa_key.pub下面的

第一次登录 输入yes的原因:信任它
#注:为了增加安全性,第一次连接B主机的时候,都会进行一个主机确认(yes)
#注:输入yes表示,是可信任主机,那就是将主机的pubkey保存在~/.ssh/known_hosts里面,以后每次连接都会验证接收的key是否和know_hosts里一直,不一致,会登录异常

#注:A机器向B机器发送请求登录
#注:B机器向A机器返回公钥
#注:如果A机器向B机器发送请求的时候,被C给拦截了
#注:C就伪造一下,把它的公钥发送给A
#注:A把密文用C的公钥加密发送给B,c就可以拿自己的密钥解密信息,不安全
#注:只能自己确认(人为确认)接收的公钥是否是B机器的,输入yes,know_hosts就是自己信任的主机,把B主机的公钥保存到know_hosts里面
#注:后续都会拿know_hosts里面 这个公钥和B发送的公钥进行比较(密钥不一致时会提示 登录失败不受信任)

#注:这个key是属于主机的key,验证这台主机的
#注:公钥登录的key属于用户的,是验证用户的key

知识点4 登录验证原理 - 公钥认证登录

2、公钥认证登陆
client端生成公钥对,将公钥追加在server端的~/.ssh/authorized_keys(1行1个公钥)
发送登录请求,server收到请求之后,生成随机字符串发送给client
client用自己的私钥对字符串进行加密,发送给server
server收到加密字符串之后用公钥解密,比较解密出的字符串和之前生成的字符串是否一致
返回结果给client

#注:公私钥对是成对存在的,一个用于加密,一个用于解密,具体哪个为私钥,哪个为公钥就看使用者自己管理

注意:非对称加密计数
使用公钥进行加密,私钥解密,基本用于数据加密
使用私钥加密公钥解密,用于认证(对数据加密性没有要求,拿到就拿到)
登录验证原理 - 公钥认证登录
#注:第一步在A机器上生成公钥对
#注:B主机将A主机的公钥写入B主机用户的~/.ssh/authorized_keys里面
#注:A主机向B机器发送登录请求
#注:B机器收到请求之后,会生成一个随机字符串。把这个随机字符串发送给A机器
#注:A机器收到随机字符串后,用私钥加密
#注:A机器将加密之后的字符串发送给B机器
#注:B机器拿到A机器的加密字符串之后,用公钥解密,再比较解密之后的字符串和生成的字符串是否一致。
#注:B机器再返回结果

#注:ABC3台机器,A上面的公钥在BC上都有,C也能公钥解密,得到字符串(对数据加密性没有要求,拿到就拿到)

知识点5 总结

知识点5.1 SSH服务介绍

远程Shell应用程序
·允许用户在远程机器上执行任意命令
·让标准输出在本地
·早期明文远程协议:telnet

SSH(Secure Shell,安全的外壳)
·为客户机提供安全的Shell环境,用于远程管理
·默认端口:TCP 22

SSH基于公钥加密(非对称加密)技术
·数据加密传输
·客户端和服务器的身份验证

知识点5.2 公钥加密体系

公钥(Public Key)和私钥(Private Key)
·公钥和私钥是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密
·不能根据一个密钥而推算出另外一个密钥
·公钥对外公开,私钥只有私钥的持有人才知道
·私钥应该由密钥的持有人妥善保管
根据实现的功能不同,可以分为数据加密和数字签名

知识点6 数据加密

发送方使用接收方的公钥加密数据
接收方使用自己的私钥解密数据
数据加密
数据加密能保证所发送数据的机密性

#注:数据加密 主要是为了保障 接收方的数据安全性

#注:把A机器的公钥发送给B机器
#注:B用A机器的公钥对传输内容进行加密,然后把信息发送给A机器
#注:将加密内容发送给A机器,此时只有A机器有权限获取里面的内容

#注:数据加密 主要是为了保障 接收方的数据安全性
#注:不能保障收到的数据一定是B机器发过来的
数据加密

知识点7 数字签名

发送方
·对原始数据执行HASH算法得到摘要值
·发送方用自己私钥加密摘要值
·将加密的摘要值与原始数据发送给接收方
数字签名
数字签名保证数据完整性、身份验证和不可否认

#数据签名
#注:如何保障收到的数据一定是B机器发过来的
#注:(A机器上要有B机器的公钥,B机器也要有A机器的公钥)
#注:A机器公钥给B机器
#注:B机器公钥给A机器
#注:B机器向A机器发送数据:B机器先用自己的私钥对摘要信息(hash,一般是data的hash散列值 做信息的摘要信息,验证信息完整值)进行加密生成签名。B机器再用A机器的公钥对信息内容和签名进行加密,发送给A机器
#注:A机器收到B机器的密文数据后,用自己的私钥进行解密。得到解密后的明文后,用B机器的公钥来解密B机器生成的签名

#注:数据签名 验证发送方的数据安全(验证发送方是不是我想要的发送方)
数据签名

知识点8 SSH身份验证过程

SSH身份验证过程

知识点9 电子邮件数字签名过程

电子邮件数字签名过程

知识点10 OpenSSH

OpenSSH
·官方站点:http://www.openssh.com
·主要软件包:openssh-server、openssh-clients
·服务名:sshd
·服务端主程序:/usr/sbin/sshd # 注:都是可执行的脚本
·客户端主程序:/usr/bin/ssh # 注:都是可执行的脚本
·服务端配置文件:/etc/ssh/sshd_config
·客户端配置文件:/etc/ssh/ssh_config

#注:xshell就是模拟ssh的客户端
#注:linux yum下下来的包基本都是rpm包

示例1:查看命令属于哪个包下载的

ssh是通过openssh下载的
[root@cPen_web ~]# which ssh
/usr/bin/ssh
[root@cPen_web ~]# rpm -qf /usr/bin/ssh
openssh-clients-8.0p1-4.el8_1.x86_64
[root@cPen_web ~]# yum list |grep openssh

示例2:启动sshd服务的实际上是执行行的服务启动脚本文件 /usr/sbin/sshd(真正执行服务的脚本)

[root@cPen_web ~]# rpm -qf /usr/sbin/sshd
openssh-server-8.0p1-4.el8_1.x86_64
[root@cPen_web ~]# service sshd restart			# 注:service 守护进程 帮它去管理服务
Redirecting to /bin/systemctl restart sshd.service
[root@cPen_web ~]# 
#注:守护进程可以帮助管理,想关闭或打开。自己管理的话,很难,要手动的kill 或者 先kill再起来

示例3:直接执行脚本/usr/sbin/sshd 启动服务

#如果服务起来,会有22号端口属于listen监听状态
[root@cPen_web ~]# service sshd stop
[root@cPen_web ~]# lsof -i:22
COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1709      root    5u  IPv4  37939      0t0  TCP cPen_web:ssh->192.168.0.42:54537 (ESTABLISHED)
sshd    2185      root    5u  IPv4  50589      0t0  TCP cPen_web:ssh->192.168.0.42:57389 (ESTABLISHED)
[root@cPen_web ~]# /usr/sbin/sshd
[root@cPen_web ~]# lsof -i:22
COMMAND  PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1709      root    5u  IPv4  37939      0t0  TCP cPen_web:ssh->192.168.0.42:54537 (ESTABLISHED)
sshd    2185      root    5u  IPv4  50589      0t0  TCP cPen_web:ssh->192.168.0.42:57389 (ESTABLISHED)
sshd    2282      root    4u  IPv4  52306      0t0  TCP *:ssh (LISTEN)		# 注:处于监听状态
sshd    2282      root    6u  IPv6  52308      0t0  TCP *:ssh (LISTEN)

示例4:直接启动vsftpd服务端

#注:vsftpd是服务端,ftp是客户端
[root@cPen_web ~]# vsftpd				# 注:启动vsftpd服务端(可以直接启动)
#注:查看服务是否起来(4种)
[root@cPen_web ~]# pidof vsftpd
2297
[root@cPen_web ~]# ps -ef |grep vsftpd
root        2297       1  0 14:50 ?        00:00:00 vsftpd
root        2300    2186  0 14:51 pts/1    00:00:00 grep --color=auto vsftpd
[root@cPen_web ~]# netstat -auplt |grep vsftpd
tcp6       0      0 [::]:ftp                [::]:*                  LISTEN      2297/vsftpd         
[root@cPen_web ~]# lsof -i:21
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vsftpd  2297 root    3u  IPv6  52524      0t0  TCP *:ftp (LISTEN)

知识点11 SSH服务端配置文件

/etc/ssh/sshd_config
·重启sshd服务生效

修改了配置文件端口号,启动不起来,原因是selinux是enforcing状态需要修改

#注:一般配置文件都是以#开头的注释行
#注:只有root用户有权限修改它

示例1:过滤出有效行

[root@cPen_web ~]# grep -v -E "^#|^$" /etc/ssh/sshd_config 	# 注:-E支持扩展正则 ; -v不显示
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
……………………
Subsystem	sftp	/usr/libexec/openssh/sftp-server

示例2:vim /etc/ssh/sshd_config

[root@cPen_web ~]# vim /etc/ssh/sshd_config 
#Port 22							# 注:默认端口号
#AddressFamily any					# 注:ip地址 (ipv4\ipv6) any 任何
#ListenAddress 0.0.0.0				# 注:本机上面的所有ip地址
#ListenAddress ::					# 注:ipv6

示例3:ipv6地址

IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。
#注:以: 冒号分隔

示例4:网络连接失败 排错

在这里插入代码片

1、ping通 确保网络是联通的
2、确保服务是起来的

[C:\~]$ telnet 192.168.0.29 2233						

1端口没起,2防火墙

[C:\~]$ telnet 192.168.0.29
Connecting to 192.168.0.29:23...
Connecting to 192.168.0.29:2233...				
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
SSH-2.0-OpenSSH_8.0

示例5:配置文件常用配置详解

[root@cPen_web ~]# vim /etc/ssh/sshd_config 
#Port 22
Port 2233						# 注:修改默认监听端口(默认22端口)
#AddressFamily any
ListenAddress 192.168.0.29		# 注:设置本机监听ip地址,默认为0.0.0.0(表示在本机任意ip地址上监听)
PermitRootLogin no				# 注:禁止root用户登录(no 不予许root用户登录,默认为yes)
#PubkeyAuthentication yes		# 注:是否开启公钥认证(默认开启)
AuthorizedKeysFile      .ssh/authorized_keys	# 注:配置公钥认证的文件(这个文件可以改 没必要)
PasswordAuthentication no		# 注:是否开启密码认证,默认为yes
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
UsePAM yes					# 注:使用pam认证(一般为yes不用改它)
#UseDNS yes					# 注:是否将客户端主机名解析成ip,可以将其设置为no
# 注:此过程不顺利的话,会非常的慢,会影响登录认证的速度,可以将其设置为no
#注:一般来说不会开启密码认证
#注:一般来说一个机器不允许root用户登录,一般来说给用户加sudo权限,用超级用户登录
#注:pam是linux下面的pam模块,认证模块。我们登陆进来后,pam帮我们做的密码/密码认证,身份认证状态检验
#注:pam认证模块 --> 配置路径 /etc/pam.d/		这个目录下面存放的是每个需要认证的服务的配置,文件名就是服务名
#注:DNS --> 域名解析服务。网络中使用ip地址通信。域名最终都要解析成ip的
#注:DNS域名解析服务。主机名也可以使用DNS解析
#注:如果在DNS范畴之内,可以通过主机名来访问这台主机,或者通过ip地址来访问
[root@cPen_centos8 ~]# visudo
sanchuang   ALL=(ALL)   NOPASSWD:ALL
[root@cPen_python ~]# service sshd restart		# 注:重启服务后22号端口已有的连接还在
#注:主机B登录
[root@cPen_web ~]# ssh 192.168.0.29 -p 2233			# 注:指定端口2233
#注:已经连接了的端口,即使改了端口,也不会有影响(只要不关闭窗口)
#注:修改配置文件只是在磁盘上进行修改,对于正在运行的程序,需要把配置加载到磁盘上(重启、reload、kill -1)
#注:修改完配置文件后,root用户 和 密码登录 登录不上去了(禁止使用密码登录)
#注:修改配置文件并重启服务时 PermitRootLogin no
#注:B机器root用户登录不上了
[root@cPen_web ~]# ssh 192.168.0.29 -p 2233
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

PasswordAuthentication no # 注:是否开启密码密码认证,默认为yes

示例6:物理机上 公钥登录(sanchuang用户登录)

#注:ssh生成公钥:(xshell菜单栏)工具 --> 新建用户密钥生成向导 --> 下一步(一直) --> 保存公钥pub key:id_rsa_2048.pub
#注:把pub key复制到sanchuang用户下面去
[sanchuang@cPen_web .ssh]$ vim authorized_keys
………………
[sanchuang@cPen_web .ssh]$ chmod 600 authorized_keys 
[sanchuang@cPen_web .ssh]$ chmod 755 /home/sanchuang
#注:物理机(xshell)生产一对密钥对,放在虚拟机上
#注:物理机上生成的key,在物理机上登,对物理机进行验证
#注:属性 --> 用户身份验证 --> 方法:Public Key ; 用户名:sanchuang ; 用户密钥:id_rsa_2048(刚才生成的密钥)
#注:这个key是物理机上的key,key粘到哪个用户下,就以哪个用户登录。在物理机上生成密钥对,要登你的虚拟机,使用xshell生成和管理密钥对,需要登录虚拟机的sanchuang用户,把物理机的pub key赋给sanchuang用户家目录下~/.ssh/authorized_keys,使用物理机去登。在物理机上生成的key,在物理机上登,sanchuang保存的是物理机的key,只能对物理机进行验证

#注:连接不成功的话,设置selinux 关掉(setenforce 0)。修改端口需要添加selinux的规则,一般来说不会去添加它的规则,而是把它关掉
#注:连不上的话,把iptables也关掉(iptables -F)

示例7:ssh命令登陆

ssh命令登陆
-l 指定登陆的用户名
-p 指定server的端口
-i 指定私钥文件,默认会在~/.ssh/去找私钥
-o 接特定设置选项
#无序输入yes,自动保存hostkey
ssh -o StrictHostKeyChecking=no 192.168.0.132 -p 223

示例8:修改完成之后重新加载配置的方法(sshd_config)

#注:修改完成之后重新加载配置的方法(sshd_config)
[root@cPen_web ~]# kill -1 2282
[root@cPen_web ~]# kill -HUP 2282
[root@cPen_web ~]# service sshd restart
[root@cPen_web ~]# service sshd reload

示例9:man 5 查看配置文件帮助文档

man 1 普通的命令
man 5 查看配置文件的帮助文档

[root@cPen_web .ssh]# man 5 /etc/ssh/sshd_config 	# 注:man 5 查看配置文件帮助文档

示例10:UsePAM yes

UsePAM yes					# 注:使用pam认证(一般为yes不用改它)
#注:pam是linux下面的pam模块,认证模块。我们登陆进来后,pam帮我们做的密码/密码认证,身份认证状态检验
#模块文件:/etc/pam.d/			# 注:存放路径;用于认证的模块,linux可插入认证模块
[root@cPen_python ~]# cd /etc/pam.d/	# 注:里面是pam的配置
[root@cPen_python pam.d]# ls		# 注:里面全是认证的模块;每一个服务一个文件
chfn         fingerprint-auth     passwd            postlogin     runuser-l          smtp.postfix  sudo-i          systemd-user
chsh         fingerprint-auth-ac  password-auth     postlogin-ac  smartcard-auth     sshd          su-l            vlock
config-util  login                password-auth-ac  remote        smartcard-auth-ac  su            system-auth     vmtoolsd
crond        other                polkit-1          runuser       smtp               sudo          system-auth-ac  vsftpd

示例11:hostname -f 查看主机名全称

[root@cPen_centos8 pam.d]# hostname -f
cPen_centos8

示例12:解析出百度的ip

[root@cPen_centos8 pam.d]# host www.baidu.com
[root@cPen_centos8 pam.d]# ping www.baidu.com

练习12

修改端口为2233
禁止root用户登录
禁止密码登录
创建管理员用户sanchuang,给sanchuang所有sudo权限
在Windows机器上生成密钥对,后续A,B两台虚拟机器都使用公钥认证进行登陆

  • 注意关闭防火墙和selinx
    iptables -F
    getenforce 0 --> 或者修改配置文件 /etc/selinux/config --disabled,永久修改需要重启机器

#注:不是错误,使用service sshd restart命令实际上是执行/bin/systemctl restart sshd.service命令
[root@cPen_python ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service # 注:使用这个命令去执行

#注:练习 具体操作如上

知识点13 ssh-agent管理密钥

ssh-agent管理密钥

ssh-agent管理密钥  一个代理程序,帮助我们管理私钥
配置: xshell--> 主机属性--》ssh --》勾选 使用xagent进行身份验证 ;勾选 使用代理转发

[sanchuang@mysql-binary .ssh]$ ssh-add id_rsa		# 注:添加主机密钥给agent管理
#注:把虚拟机上面的key也交给给ssh-agent去管理

[sanchuang@mysql-binary .ssh]$ ssh-add -l			# 注:查看agent管理了哪些密钥
2048 SHA256:eJz1xcOJnntAP/R0w1if7oEaukIbiwh0vmtp9Q605ls  (RSA)

#注:ssh-agent的概念:帮你管理密钥的,默认情况下ssh-agent开在物理机上的。ssh-agent就是一个中间商,保存管理密钥的。在xshell里面开启了ssh-agent之后,从A机器登录到B机器,它会先取看一下A机器root家目录下面有没有公私钥,没有的话 会从ssh-agent里面捞取它的公私钥
#注:B机器没有A机器的公钥,它会去找ssh-agent里面管理的那个公钥对(中间商),最后认证是拿物理机的key去做认证的,因为物理机里面跑了1个ssh-agent,管理了物理机的pubkey,物理机的pubkey可以登录A又可以登录B,满足的条件是物理机能够登录到B
#注:再来一台主机C,想要从A调到C,先决条件是C要有物理机的pubkey,C对物理机授了权,然后物理机的key又由ssh-agent去管理,就可以从A主机跳到C主机。(家目录下面没有私钥生成,就去找ssh-agent管理的密钥对,只要C有物理机的公钥,就都可以登录了)

#注:这个服务是xshell的,只能通过xshell里面才能进行这一系列操作(xshell管理ssh-agent)

#注:(xshell菜单栏)文件 --> 打开(下拉) --> 属性(右键) --> SSH --> 允许Xagent进行身份验证(勾上);允许代理转发(勾上)
ssh-agent管理密钥
#注:在B机器上勾上(现在要在A机器上登录B机器)

#注:物理机上面有2个虚拟机 A、B,物理机使用xshell去连接A和B。刚在在A、B上都创建了sanchuang用户,并且把物理机的pub key都给了A、B两台机器的sanchuang用户。现在,在A机器上想要连接B机器的sanchuang用户,应该怎么做?B机器上没有A机器的key
#注:答:把A的key给B(在A机器上生成自己的key,这样的话太麻烦了)

#注:用户加的是哪一台的pubkey,就是允许哪一台的主机登录,加的authorized_keys是为哪一台机器授权
#注:A、B机器2台主机之间进行通讯的话,有1个本地的概念,它会在本地用户的家目录下面去找key;物理机没有这个概念,因为它是通过xshell(ssh的客户端,图形界面的ssh命令)去连接的,它通过xshell去管理它的key

示例:A机器上登录到B机器

#注:前提确保 Windows可以免密码登录到A、B机器
[sanchuang@cPen_python ~]$ ssh 10.122.148.108 -p 2233
Last login: Sun Nov 15 19:59:00 2020 from 10.122.38.250
[sanchuang@cPen_centos8 ~]$ 

知识点14 其他总结

知识点14.1 SSH服务端配置文件

SSH登录使用的用户名
·服务器中的本地系统用户的帐号名
SSH登录的用户验证方式
·密码验证:使用服务器中系统帐号对应的密码
·密钥对验证:使用客户机中生成的公钥、私钥
SSH客户端文件通常无需修改

知识点14.2 SSH客户端

使用ssh命令远程登录
·方式1: ssh 用户名@服务器地址
·方式2: ssh -l 用户名 服务器地址
·方式3: ssh 服务器地址
客户机使用第一次连接服务器时
[root@localhost ~]# ssh root@10.10.10.1

知识点14.3 known_hosts文件

客户机使用ssh第一次连接服务器时
·将服务器上sshd守护进程的公钥复制到本地
·存放到本地~/.ssh/known_hosts文件中
·每行存放一台服务器的公钥
·用来验证服务器的身份

公钥验证服务器的具体细节
known_hosts文件
known_hosts文件

知识点14.4 密钥方式

SSH的公钥认证流程
密钥方式
公钥验证客户端的具体细节
密钥方式
密钥方式
SSH公钥认证的基本实现步骤
·1、在客户机创建密钥对
·ssh-keygen -t rsa 指定rsa算法
·设置保护私钥文件的密码
·在~/.ssh下生成两个文件
·id_rsa是用户的私钥
·id_rsa.pub是用户的公钥
·2.将公钥文件上传至服务器
·上传到服务器~/.ssh/authorized_keys文件
·文件中每行保存一个用户的公钥
·scp ~/.ssh/id_rsa.pub
root@10.10.10.1:~/.ssh/authorized_keys

知识点14.5 SSH客户端

使用scp命令远程复制文件/目录
·方式1: scp 用户名@服务器地址:源文件 目标路径
·方式2: scp 本地文件 用户名@服务器地址:目标路径
·若复制的是目录,则需添加“-r”选项
使用sftp命令从服务器下载文件
·格式:sftp 用户名@服务器地址

知识点14.6 通过SSH运行服务器中的窗口程序

运行服务器中的图形程序是SSH的重要应用
·ssh命令需要在图形界面虚拟终端下运行
·命令格式:ssh -X username@sshserver
通过SSH运行服务器中的窗口程序
xlock是运行在SSH服务器中,而显示在SSH客户机中的窗口程序

知识点14.7 SSH客户端应用

使用图形客户端软件 SecureCRT
·主要用途:基于SSH协议远程登录以便管理服务器
·下载地址:http://www.vandyke.com/

使用图形客户端软件 WinSCP
·主要用途:基于sftp、scp或ftp的方式下载/上传数据
·下载地址:http://winscp.net/

知识点14.8 SSH访问控制

SSH使用TCP Wrappers实现访问控制

主要配置文件
·/etc/hosts.allow
·/etc/hosts.deny
SSH访问控制
TCP Wrappers可以控制哪些服务
·受super daemon(xinetd)管理的服务
·支持libwrap.so模块的服务

TCP Wrappers的访问控制原则
·首先检查 hosts.allow 文件,若找到相匹配的策略,则允许访问
·否则继续检查 hosts.deny 文件,若找到相匹配的策略,则拒绝访问
·如果两个文件中都没有相匹配的策略,则允许访问

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mycpen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值