SSH简述

远程访问及控制

1、SSH

1.1 简单介绍

SSH协议(secure shell)

  • 是一种安全通道协议

  • 对数据进行加密处理,用于远程管理

OpenSSH(安装包名,centos7自带)

  • 服务名称:sshd

  • 服务端主程序:/usr/sbin/sshd

  • 服务端配置文件:/etc/ssh/sshd_config

  • 客户端配置文件:/etc/ssh/ssh_config

优点:

  • 数据传输是加密的,可以防止信息泄漏

  • 数据传输是压缩的,可以提高传输速度

使用

ssh服务端主要包括两个服务功能 ssh远程链接sftp服务(文件传输功能)

作用:SSHD 服务使用 SSH 协议可以用来进行远程控制,或在计算机之间传送文件。 相比较之前用 Telnet 方式来传输文件要安全很多,因为 Telnet 使用明文传输,SSH 是加密传输。

1.2 传输原理

image-20230806193527100

第一次连接时,客户端发起请求

服务端生成会话id,会将会话id和服务端的公钥交给客户端

客户端得到服务端的公钥和会话id

客户端用户通过会话id与自己的公钥生成一个值,再将这个值通过服务端的公钥加密

客户端将加密后的值传给服务端,服务端利用自己的私钥解密得到客户端的公钥和客户端的会话id

 

复制代码
 免密登录
 第一步生成密钥
 ssh-keygen  -t指定加密方式,默认rsa
 Enter file in which to save the key (/home/lisi/.ssh/id_ecdsa): 
 #选择密钥文件存放位置,默认在当前用户家目录下  .ssh文件夹中
 会生成两个文件,带.pub是公钥,要传给服务器
 Enter passphrase (empty for no passphrase): 
 #对密钥文件进行加密,如果设置了密码,只是对文件进行加密,打开需要密码
 ssh-copy-id -i服务器地址#将密钥传给服务器
View Code
复制代码

 

登录
复制代码
 #登录 方法一:
 ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
 命令                                          端口号                       
 ​
 vim /etc/hosts
 192.168.91.101 node2
 ​
 当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh   IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。
 ​
 jAdnvemeML+z00Zmk/SL5PWDVEvJqwPFID3iae+Xf4g.
 jAdnvemeML+z00Zmk/SL5PWDVEvJqwPFID3iae+Xf4g.
 ​
 例子:
 ​
 #默认使用22端口   root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码
 [root@31yml /]#ssh 192.168.177.200
 The authenticity of host '192.168.177.200 (192.168.177.200)' can't be established.
 ECDSA key fingerprint is SHA256:n6/OvgUhDi1cUlAFBjSt5QMt68EYA5fwnPZRQxHBR+c.
 ECDSA key fingerprint is MD5:dc:49:1d:d0:21:f2:4f:79:3f:e6:e6:29:a8:4e:33:c4.
 Are you sure you want to continue connecting (yes/no)? y
 Please type 'yes' or 'no': yes
 Warning: Permanently added '192.168.177.200' (ECDSA) to the list of known hosts.
 root@192.168.177.200's password: 
 Last login: Fri Aug  4 00:46:23 2023
 ​
 ​
 ########方便编写脚本#####################
 [root@31yml ~]#vim /etc/ssh/ssh_config
 #修改客户端配置文件 无需验证,有安全隐患
 35    StrictHostKeyChecking no
 ​
 ​
 #登录方法二
 ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
 -l :-l 选项,指定登录名称。
 -p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
 -t
 例子:
 [root@31yml ~]#ssh -l root 192.168.91.101
 root@192.168.91.101's password: 
 Last login: Tue Sep 28 22:25:40 2021 from 192.168.91.100
View Code
复制代码

 

1.3 服务端配置

1.3.1常用项配置
复制代码
 [root@ky15-1 ~]# vim /etc/ssh/sshd_config 
 17  Port    22   
 #生产建议修改   
 ​
 ListenAddress ip
 #监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。
 ​
 LoginGraceTime 2m
 #用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒
 ​
 PermitRootLogin yes 
 #默认 ubuntu不允许root远程ssh登录
 ​
 StrictModes yes   
 #检查.ssh/文件的所有者,权限等
 ​
 MaxAuthTries 
 #用来设置最大失败尝试登陆次数为6
 ​
 ​
 MaxSessions  10         
 #同一个连接最大会话
 PubkeyAuthentication yes     
 #基于key验证
 ​
 PermitEmptyPasswords no      
 #密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。
 ​
 ​
 PasswordAuthentication yes   
 #基于用户名和密码连接
 GatewayPorts no
 ClientAliveInterval 10 
 #单位:秒
 ClientAliveCountMax 3 
 #默认3
 UseDNS yes 
 #提高速度可改为no   内网改为no  禁用反向解析
 GSSAPIAuthentication yes #提高速度可改为no
 MaxStartups    #未认证连接最大值,默认值10
 Banner /path/file
 #以下可以限制可登录用户的办法:白名单  黑名单
 AllowUsers user1 user2 user3@ip(限制主机)
 DenyUsers user1 user2 user3
 AllowGroups g1 g2
 DenyGroups g1 g2
View Code
复制代码

 

1.3.2 实际操作

修改默认端口

复制代码
 #修改默认端口
 [root@localhost ssh]#vim  /etc/ssh/sshd_config
 #17 行修改自己默认的端口
 17 Port 8848
View Code
复制代码

 

禁止root用户登录

复制代码
 [root@localhost ssh]#vim  /etc/ssh/sshd_config
 #开启38 行 并改为 no,默认注释并写的yes
 38 PermitRootLogin no
 #注意虽然阻止了root 但是普通用户可以使用su
 [root@localhost1 ~]#ssh zhangsan@192.168.177.100 -p 8848
 zhangsan@192.168.177.100's password: 
 Last login: Fri Aug 27 16:50:35 2021
 [zhangsan@localhost2 ~]$ 
 [zhangsan@localhost2 ~]$ su root
 密码:
 [root@localhost2 zhangsan]#
 ​
 修改 pam认证模块
 [root@localhost ssh]#vim /etc/pam.d/su
 #开启第6行,默认注释
 6 auth            required        pam_wheel.so use_uid
View Code
复制代码

 

白名单黑名单列表

复制代码
 [root@localhost ssh]#vim /etc/ssh/sshd_config
 #手动添加
 AllowUsers zhangsan@192.168.177.200  lisi   
 #允许所有有的主机访问我的lisi用户
 #只允许 zhangsan 从192.168.177.200上访问
 ​
 DenyUsers  liwu
View Code
复制代码

 

输错密码限制(验证此处)

复制代码
 [root@localhost ssh]#vim /etc/ssh/sshd_config
 #取消注释 默认注释了
 40 MaxAuthTries 2
 ​
 [root@localhost ~]#ssh zhangsan@192.168.177.100 -p 8848
 #默认次数3
 zhangsan@192.168.177.100's password: 
 Permission denied, please try again.
 zhangsan@192.168.177.100's password: 
 Received disconnect from 192.168.177.100 port 8848:2: Too many authentication failures
 Authentication failed.
 [root@localhost ~]# ssh -o NumberOfPasswordPrompts=8  root@192.168.177.100
 #设置尝试次数为8 
 root@192.168.177.100's password:
View Code
复制代码

 

1.3.3 使用秘钥对及免交互验证登录

image-20230807213533512

  1. 客户端发起ssh请求,服务器会把自己的公钥发送给用户

  2. 用户会根据服务器发来的公钥对密码进行加密

  3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

image-20230807214420343

  1. 首先在客户端生成一对密钥(ssh-keygen)

  2. 并将客户端的公钥ssh-copy-id 拷贝到服务端

  3. 当客户端再次发送一个连接请求,包括ip、用户名

  4. 服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc

  5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端

  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

 

复制代码
 [root@31yml .ssh]#ssh-keygen 
 Generating public/private rsa key pair.
 Enter file in which to save the key (/root/.ssh/id_rsa): 
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /root/.ssh/id_rsa.
 Your public key has been saved in /root/.ssh/id_rsa.pub.
 The key fingerprint is:
 SHA256:LLWeS+q61pZv8xkco6lxU0w+l/DRfiw2feIsVNyLgQM root@31yml
 The key's randomart image is:
 +---[RSA 2048]----+
 |         E       |
 |          . .o . |
 |        . oo..+ .|
 |       o = o.=oo.|
 |      . S B =.*.=|
 |       o * * + =.|
 |     ...O o . o  |
 |    . +*oo o .   |
 |   .o=+oooo      |
 ​
 [root@31yml .ssh]#ssh-copy-id -i 192.168.177.200
 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
 /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
 root@192.168.177.200's password: 
 ​
 Number of key(s) added: 1
 ​
 Now try logging into the machine, with:   "ssh '192.168.177.200'"
 and check to make sure that only the key(s) you wanted were added.
 ​
 ​
 [root@31yml .ssh]#ssh 192.168.177.200
 Last login: Mon Aug  7 21:56:41 2023 from 192.168.177.100
 [root@yml-2 ~]#
View Code
复制代码

 


 
 
posted @   Bacolate  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示