1 SSH协议
1.1 概述
SSH是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。
1.2 SSH协商交互过程
- 客户端发起链接请求
- 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
- 客户端生成密钥对
- 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
- 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
- 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
- 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都 会被加密
1.3 SSH证书校验交互登录流程示意图所示
2 ssh常用参数
2.1无参数
ssh 192.168.31.21
[root@nginx-2 ~]# ssh 192.168.31.21
Last login: Tue Aug 24 11:16:52 2021 from 192.168.31.1
[root@nginx-lb01 ~]# hostname -i
192.168.31.21
2.2 指定登陆用户
ssh -l root 192.168.31.21
或者
ssh root@192.168.31.21
[root@nginx-2 ~]# ssh root@192.168.31.21 hostname -I
192.168.31.21
2.3 指定端口
ssh root@192.168.31.21 -p222
[root@nginx-2 ~]# ssh root@192.168.31.21 -p222
Last login: Tue Aug 24 12:44:50 2021 from 192.168.31.104
[root@nginx-lb01 ~]# hostname -i
192.168.31.21
2.4 对请求数据压缩
ssh -C 192.168.31.23
[root@nginx-2 ~]# ssh -C 192.168.31.23
The authenticity of host '192.168.31.23 (192.168.31.23)' can't be established.
ECDSA key fingerprint is SHA256:13M/GZzWQQH8v1UrEbvl3RRfyuQglwkNxqhrf1qMO5w.
ECDSA key fingerprint is MD5:49:13:62:29:88:25:ba:d5:12:0c:fb:f7:a9:00:08:f8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.31.23' (ECDSA) to the list of known hosts.
root@192.168.31.23's password:
Last login: Tue Aug 24 11:20:18 2021 from 192.168.31.1
[root@localhost ~]# hostname -I
192.168.31.23
2.5 调试模式
ssh -v 192.168.31.23
2.6 指定源地址
ssh -b 192.168.31.104 192.168.31.23
2.7 使用其他配置文件
#复制配置文件
cp /etc/ssh/ssh_config /opt/my_ssh_config
ssh -F /opt/my_ssh_config 192.168.31.23
3 sshd服务常用参数
grep -Ev "^$|^#" /etc/ssh/sshd_config
序号 | 参数 | 含义 |
---|---|---|
1 | Port 22 | # 端口,默认22 |
2 | ListenAddress IP | # 设置绑定的ip地址 |
3 | LoginGraceTime 2m | #设定登陆超时时间 |
4 | PermitRootLogin yes | #默认ubuntu不允许root远程ssh登录 |
5 | StrictModes yes | #检查.ssh/文件的所有者,权限等 |
6 | MaxAuthTries 6 | #最大尝试次数 |
7 | MaxSessions 10 | #同一个连接最大会话 |
8 | PubkeyAuthentication yes | #基于key验证 |
9 | PermitEmptyPasswords no | #空密码连接 |
10 | PasswordAuthentication yes | #基于用户名和密码连接 |
11 | GatewayPorts no | #VPS做转发 |
12 | ClientAliveInterval 10 | #如果n秒之内没有接收到客户端的消息,就通过加密通道发送一条信息。参见ClientAliveCountMax。默认值为0,意味着不发送消息。这项声明通过加密通道(应用层,参见《基础篇》10.1.7节)传递消息,不容易受到IP欺骗攻击(参见术语表)。它区别于TCPKeepAlive,后者使用TCP的keepalive选项(传输层,参见《基础篇》10.1.7节),容易受到IP欺骗攻击。单位:秒 |
13 | ClientAliveCountMax 3 | #指定sshd从客户端断开连接之前,在没有接收到响应时能够发送client-alive消息的条数。参见ClientAliveInterval。.默认3 |
14 | UseDNS yes | #可以关闭DNS反解析,提升登陆速度 |
15 | GSSAPIAuthentication yes | #提高速度可改为no |
16 | MaxStartups | #未认证连接最大值,默认值10 |
17 | Banner /path/file | 绝大多数的扫描器(INCLUDED ISS)都是从banner info来判断services是否有漏洞的 |
18 | AllowUsers user1 user2 user3 | #以下可以限制可登录用户的办法: |
19 | DenyUsers | userlist是一个由空格隔开的用户名列表,指定哪些用户不可以使用sshd登录。这个列表可以含有通配符*和?。可以用user或者user@host的形式来指定用户。如果使用的是第二种格式的话,那么要确保将host指定为hostname命令所返回的值。 |
20 | AllowGroups | 这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*“和”?"通配符)。默认允许所有组登录。如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。 |
21 | DenyGroups | 这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*“和”?"通配符)。默认允许所有组登录。如果使用了这个指令,那么这些组中的成员将被拒绝登录。 |