区块链技术博客
www.b2bchain.cn

21_linux笔记-ssh服务

这篇文章主要介绍了21_linux笔记-ssh服务的讲解,通过具体代码实例进行20087 讲解,并且分析了21_linux笔记-ssh服务的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=20087

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

  • 知识点1 公钥认证排错
    • 示例
  • 知识点2 登录方式
  • 知识点3 登录验证原理 – 密码登录
  • 知识点4 登录验证原理 – 公钥认证登录
  • 知识点5 总结
    • 知识点5.1 SSH服务介绍
    • 知识点5.2 公钥加密体系
  • 知识点6 数据加密
  • 知识点7 数字签名
  • 知识点8 SSH身份验证过程
  • 知识点9 电子邮件数字签名过程
  • 知识点10 OpenSSH
    • 示例1:查看命令属于哪个包下载的
    • 示例2:启动sshd服务的实际上是执行行的服务启动脚本文件 /usr/sbin/sshd(真正执行服务的脚本)
    • 示例3:直接执行脚本/usr/sbin/sshd 启动服务
    • 示例4:直接启动vsftpd服务端
  • 知识点11 SSH服务端配置文件
    • 示例1:过滤出有效行
    • 示例2:vim /etc/ssh/sshd_config
    • 示例3:ipv6地址
    • 示例4:网络连接失败 排错
    • 示例5:配置文件常用配置详解
    • 示例6:物理机上 公钥登录(sanchuang用户登录)
    • 示例7:ssh命令登陆
    • 示例8:修改完成之后重新加载配置的方法(sshd_config)
    • 示例9:man 5 查看配置文件帮助文档
    • 示例10:UsePAM yes
    • 示例11:hostname -f 查看主机名全称
    • 示例12:解析出百度的ip
  • 练习12
  • 知识点13 ssh-agent管理**
    • 示例:A机器上登录到B机器
  • 知识点14 其他总结
    • 知识点14.1 SSH服务端配置文件
    • 知识点14.2 SSH客户端
    • 知识点14.3 known_hosts文件
    • 知识点14.4 **方式
    • 知识点14.5 SSH客户端
    • 知识点14.6 通过SSH运行服务器中的窗口程序
    • 知识点14.7 SSH客户端应用
    • 知识点14.8 SSH访问控制

博客cpen_web

知识点1 公钥认证排错

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

示例

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

知识点2 登录方式

[[email protected]_web .ssh]# ssh [email protected] [[email protected]_web .ssh]# ssh 192.168.0.30 -l wy [[email protected]_web .ssh]# ssh 192.168.0.30 -l wy -p 22	# 注:指定用户,指定端口(默认22号端口) [[email protected]_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机器有没有这个用户) [[email protected]_web ~]$ ssh 192.168.0.30 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes [email protected]'s password:  [[email protected]_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基于公钥加密的技术
21_linux笔记-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机器下

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

B机器下

[[email protected]_web .ssh]# cd /etc/ssh				# 注:ssh服务的配置文件 [[email protected]_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 [[email protected]_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

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

注意:非对称加密计数
使用公钥进行加密,私钥解密,基本用于数据加密
使用私钥加密公钥解密,用于认证(对数据加密性没有要求,拿到就拿到)
21_linux笔记-ssh服务
#注:第一步在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 数据加密

发送方使用接收方的公钥加密数据
接收方使用自己的私钥解密数据
21_linux笔记-ssh服务
数据加密能保证所发送数据的机密性

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

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

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

知识点7 数字签名

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

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

#注:数据签名 验证发送方的数据安全(验证发送方是不是我想要的发送方)
21_linux笔记-ssh服务

知识点8 SSH身份验证过程

21_linux笔记-ssh服务

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

21_linux笔记-ssh服务

知识点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下载的 [[email protected]_web ~]# which ssh /usr/bin/ssh [[email protected]_web ~]# rpm -qf /usr/bin/ssh openssh-clients-8.0p1-4.el8_1.x86_64 [[email protected]_web ~]# yum list |grep openssh 

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

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

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

#如果服务起来,会有22号端口属于listen监听状态 [[email protected]_web ~]# service sshd stop [[email protected]_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) [[email protected]_web ~]# /usr/sbin/sshd [[email protected]_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是客户端 [[email protected]_web ~]# vsftpd				# 注:启动vsftpd服务端(可以直接启动) #注:查看服务是否起来(4种) [[email protected]_web ~]# pidof vsftpd 2297 [[email protected]_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 [[email protected]_web ~]# netstat -auplt |grep vsftpd tcp6       0      0 [::]:ftp                [::]:*                  LISTEN      2297/vsftpd          [[email protected]_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:过滤出有效行

[[email protected]_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

[[email protected]_web ~]# vim /etc/ssh/sshd_config  #Port 22							# 注:默认端口号 #AddressFamily any					# 注:ip地址 (ipv4ipv6) 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:配置文件常用配置详解

[[email protected]_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地址来访问 
[[email protected]_centos8 ~]# visudo sanchuang   ALL=(ALL)   NOPASSWD:ALL [[email protected]_python ~]# service sshd restart		# 注:重启服务后22号端口已有的连接还在 
#注:主机B登录 [[email protected]_web ~]# ssh 192.168.0.29 -p 2233			# 注:指定端口2233 #注:已经连接了的端口,即使改了端口,也不会有影响(只要不关闭窗口) #注:修改配置文件只是在磁盘上进行修改,对于正在运行的程序,需要把配置加载到磁盘上(重启、reload、kill -1) #注:修改完配置文件后,root用户 和 密码登录 登录不上去了(禁止使用密码登录) 
#注:修改配置文件并重启服务时 PermitRootLogin no #注:B机器root用户登录不上了 [[email protected]_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用户下面去 [[email protected]_web .ssh]$ vim authorized_keys ……………… [[email protected]_web .ssh]$ chmod 600 authorized_keys  [[email protected]_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) [[email protected]_web ~]# kill -1 2282 [[email protected]_web ~]# kill -HUP 2282 [[email protected]_web ~]# service sshd restart [[email protected]_web ~]# service sshd reload 

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

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

[[email protected]_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可插入认证模块 
[[email protected]_python ~]# cd /etc/pam.d/	# 注:里面是pam的配置 [[email protected]_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 查看主机名全称

[[email protected]_centos8 pam.d]# hostname -f cPen_centos8 

示例12:解析出百度的ip

[[email protected]_centos8 pam.d]# host www.baidu.com [[email protected]_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命令
[[email protected]_python ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service # 注:使用这个命令去执行

#注:练习 具体操作如上

知识点13 ssh-agent管理**

21_linux笔记-ssh服务

ssh-agent管理**  一个代理程序,帮助我们管理私钥 配置: xshell--> 主机属性--》ssh --》勾选 使用xagent进行身份验证 ;勾选 使用代理转发  [[email protected] .ssh]$ ssh-add id_rsa		# 注:添加主机**给agent管理 #注:把虚拟机上面的key也交给给ssh-agent去管理  [[email protected] .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进行身份验证(勾上);允许代理转发(勾上)
21_linux笔记-ssh服务
#注:在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机器 [[email protected]_python ~]$ ssh 10.122.148.108 -p 2233 Last login: Sun Nov 15 19:59:00 2020 from 10.122.38.250 [[email protected]_centos8 ~]$  

知识点14 其他总结

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

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

知识点14.2 SSH客户端

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

知识点14.3 known_hosts文件

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

公钥验证服务器的具体细节
21_linux笔记-ssh服务
21_linux笔记-ssh服务

知识点14.4 **方式

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

知识点14.5 SSH客户端

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

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

运行服务器中的图形程序是SSH的重要应用
·ssh命令需要在图形界面虚拟终端下运行
·命令格式:ssh -X [email protected]
21_linux笔记-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
21_linux笔记-ssh服务
TCP Wrappers可以控制哪些服务
·受super daemon(xinetd)管理的服务
·支持libwrap.so模块的服务

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

本文转自互联网,侵权联系删除21_linux笔记-ssh服务

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 21_linux笔记-ssh服务
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们