SSH服务

1、什么是ssh服务

ssh —— secure shell
SSH服务提供两种功能,一个是远程控制服务器,第二个是对传输的数据进行加密,保护传输数据的安全性
具体软件实现: Openssh:ssh协议的开源软件。

工作原理:
1、连接建立
SSH服务器在指定的端口侦听客户端的连接请求,在客户端向服务器发起连接请求后,双方建立一个TCP连接。
2、版本协商
SSH协议目前存在SSH1.X(SSH2.0之前的版本)和SSH2.0版本。SSH2.0协议相比SSH1.X协议来说,在结构上做了扩展,可以支持更多的认证方法和密钥交换方法,同时提高了服务能力。SSH服务器和客户端通过协商确定最终使用的SSH版本号。
3、算法协商
SSH支持多种加密算法,双方根据各自支持的算法,协商出最终用于产生会话密钥的密钥交换算法、用于数据信息加密的加密算法、用于进行数字签名和认证的公钥算法以及用于数据完整性保护的HMAC算法。
4、密钥交换
服务器和客户端通过密钥交换算法,动态生成共享的会话密钥和会话ID,建立加密通道。会话密钥主要用于后续数据传输的加密,会话ID用于在认证过程中标识该SSH连接。
5、用户认证
SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证。SSH支持以下几种认证方式:

密码(password)认证:客户端通过用户名和密码的方式进行认证,将加密后的用户名和密码发送给服务器,服务器解密后与本地保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。

密钥(publickey)认证:客户端通过用户名,公钥以及公钥算法等信息来与服务器进行认证。

password-publickey认证:指用户需要同时满足密码认证和密钥认证才能登录。

all认证:只要满足密码认证和密钥认证其中一种即可。

6、会话请求:
认证通过后,SSH客户端向服务器端发送会话请求,请求服务器提供某种类型的服务,即请求与服务器建立相应的会话。
7、会话交互:
会话建立后,SSH服务器端和客户端在该会话上进行数据信息的交互

2、相关命令

ssh

1、只登录
[root@monitor_server .ssh]# ssh 192.168.2.141  (不指定,默认当前用户名登录)
Last login: Sun May 14 16:23:57 2023 from 192.168.2.202
[root@web_1 ~]# exit
登出
Connection to 192.168.2.141 closed.
[root@monitor_server .ssh]# ssh root@192.168.2.141(指定用户名)
Last login: Sun May 14 19:47:24 2023 from 192.168.2.202
[root@web_1 ~]# exit
登出
Connection to 192.168.2.141 closed.

2、登录并运行脚本或命令
[root@monitor_server .ssh]# ssh root@192.168.2.141 mkdir /sc
[root@monitor_server .ssh]# ssh root@192.168.2.141
Last login: Sun May 14 19:47:53 2023 from 192.168.2.202
[root@web_1 ~]# cd /sc
[root@web_1 sc]# ls

-a
禁止转发认证代理的连接.
-A
允许转发认证代理的连接. 可以在配置文件中对每个主机单独设定这个参数.

-b bind_address
在拥有多个接口或地址别名的机器上, 指定收发接口.

-c blowfish|3des|des
选择加密会话的密码术.
-c cipher_spec
另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的密码术. 详见 Ciphers

-e ch|^ch|none
设置 pty 会话的 escape 字符 (默认字符: `~’ ) . escape 字符只在行首有效, escape 字符后面跟一个点 (`.’ ) 表示结束连接, 跟一个 control-Z 表示挂起连接(suspend), 跟 escape 字符自己 表示输出这个字符. 把这个字符设为 ``none 则禁止 escape 功能, 使会话完全透明.

-f
要求 在执行命令前退至后台. 它用于当 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.
-g
允许远端主机连接本地转发的端口.

-i identity_file
指定一个 RSA 或 DSA 认证所需的身份(私钥)文件. 默认文件是协议第一版的 $HOME/.ssh/identity 以及协议第二版的 $HOME/.ssh/id_rsa 和 $HOME/.ssh/id_dsa 文件. 也可以在配置文件中对每个主机单独指定身份文件. 可以同时使用多个 -i 选项 (也可以在配置文件中指定多个身份文件).

-I smartcard_device
指定智能卡(smartcard)设备. 参数是设备文件, 能够用它和智能卡通信, 智能卡里面存储了用户的 RSA 私钥.

-k
禁止转发 Kerberos 门票和 AFS 令牌. 可以在配置文件中对每个主机单独设定这个参数.

-l login_name
指定登录远程主机的用户. 可以在配置文件中对每个主机单独设定这个参数.

-m mac_spec
另外, 对于协议第二版, 这里可以指定一组用逗号隔开, 按优先顺序排列的 MAC(消息验证码)算法 (message authentication code). 详情以 MACs 为关键字查询.

-n
把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)

-N
不执行远程命令. 用于转发端口. (仅限协议第二版)

-o option
可以在这里给出某些选项, 格式和配置文件中的格式一样. 它用来设置那些没有命令行开关的选项.

-p port
指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数.

-q
安静模式. 消除所有的警告和诊断信息.

-s
请求远程系统激活一个子系统. 子系统是 SSH2 协议的一个特性, 能够协助 其他应用程序(如 sftp)把SSH用做安全通路. 子系统通过远程命令指定.

-t
强制分配伪终端. 可以在远程机器上执行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜单服务. 并联的 -t 选项强制分配终端, 即使 没有本地终端.

-T
禁止分配伪终端.

-v
冗详模式. 使 打印关于运行情况的调试信息. 在调试连接, 认证和配置问题时非常有用. 并联的 -v 选项能够增加冗详程度. 最多为三个.

-x
禁止 X11 转发.

-X
允许 X11 转发. 可以在配置文件中对每个主机单独设定这个参数.
应该谨慎使用 X11 转发. 如果用户在远程主机上能够绕过文件访问权限 (根据用户的X授权数据库), 他就可以通过转发的连接访问本地 X11 显示器. 攻击者可以据此采取行动, 如监视键盘输入等.

-C
要求进行数据压缩 (包括 stdin, stdout, stderr 以及转发 X11 和 TCP/IP 连接 的数据). 压缩算法和 gzip(1) 的一样, 协议第一版中, 压缩级别 ``level 用 CompressionLevel 选项控制. 压缩技术在 modem 线路或其他慢速连接上很有用, 但是在高速网络上反而 可能降低速度. 可以在配置文件中对每个主机单独设定这个参数. 另见 Compression 选项.

-F configfile
指定一个用户级配置文件. 如果在命令行上指定了配置文件, 系统级配置文件 (/etc/ssh/ssh_config ) 将被忽略. 默认的用户级配置文件是 $HOME/.ssh/config

-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port
指定一个本地机器 ``动态的 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

scp

传递文件
[root@monitor_server .ssh]# scp /etc/passwd root@192.168.2.141:/sc
passwd                                                                  100% 1149     1.5MB/s   00:00    
[root@monitor_server .ssh]# ssh root@192.168.2.141
Last login: Sun May 14 19:51:25 2023 from 192.168.2.202
[root@web_1 ~]# cd /sc
[root@web_1 sc]# ls
passwd

-1 强制scp 用协议1

-2 强制scp 用协议2

-4 强制scp用IPV4的网址

-6 强制scp用IPV6的网址

-B 选择批处理模式(防止输入密码)

-C 允许压缩。 标注-C到ssh(1)来允许压缩

-c cipher选择cipher来加密数据传输。这个选项直接传递到ssh(1)

-F ssh_config设定一个可变动的用户配置给ssh.这个选项直接会被传递到ssh(1)

-i identity_file选择被RSA认证读取私有密码的文件。这个选项可以直接被传递到ssh(1)

-l limit限制传输带宽,也就是速度 用KByte/s的速度

-o ssh_option 可以把ssh_config中的配置格式传到ssh中。这种模式对于说明没有独立的scp文件中断符的scp很有帮助。关于选项的如下。而他们的值请参看ssh_config(5)

-P port 指定连接远程连接端口。注意这个选项需要写成大写的模式。因为-p已经早保留了次数和模式

-S program 指定一个加密程序。这个程序必须可读所有ssh(1)的选项。

-p 指定修改次数,连接次数,还有对于原文件的模式

-q 把进度参数关掉

-r 递归的复制整个文件夹

-S program 指定一个加密程序。这个程序必须可读所有ssh(1)的选项。

-V 冗余模式。 让 scp 和 ssh(1) 打印他们的排错信息, 这个在排错连接,认证,和配置中非常有用

3、建立免密通道

1、在客户端生成密钥对
2、将公钥发送给服务器
3、验证

1、在客户端生成密钥对
[root@monitor_server .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:5HlG6gihJyMLiL28bkLULWgWi5d4qtQ6nRaClPlcLoo root@monitor_server
The key's randomart image is:
+---[RSA 2048]----+
|                 |
| .               |
|..B.o   . .      |
|=@++ + o +       |
|@+O *   S o      |
|+B @ o o o       |
|* B + . .        |
|E+.=             |
| +=              |
+----[SHA256]-----+

2、将公钥发送给服务器
[root@monitor_server .ssh]# ssh-copy-id root@192.168.2.141
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.2.141 (192.168.2.141)' can't be established.
ECDSA key fingerprint is SHA256:Ak1M1MggIBUCsB288qG3yWpmkiBhHcL+A77SL1yq5yI.
ECDSA key fingerprint is MD5:63:ef:82:9e:69:8c:07:05:df:74:c7:77:63:3a:13:1a.
Are you sure you want to continue connecting (yes/no)? yes
/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.2.141's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.2.141'"
and check to make sure that only the key(s) you wanted were added.

3、验证
[root@monitor_server .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@monitor_server .ssh]# ssh root@192.168.2.141
Last login: Sun May 14 15:28:25 2023 from 192.168.2.106
[root@web_1 ~]# exit

4、堡垒机/跳板机

让外网用户能够访问内网机器
如何做的让内外的服务器只允许堡垒机/跳板机访问?
1.iptables
2.tcp wrappers

SSH使用TCP Wrappers实现访问控制
主要配置文件
/etc/hosts.allow --》白名单
/etc/hosts.deny --》黑名单

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

只有跳板机(192.168.2.202)能访问该web服务器:

[root@web_1 ~]# cat /etc/hosts.deny
#
# hosts.deny	This file contains access rules which are used to
#		deny connections to network services that either use
#		the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		The rules in this file can also be set up in
#		/etc/hosts.allow with a 'deny' option instead.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd:all
[root@web_1 ~]# cat /etc/hosts.allow 
#
# hosts.allow	This file contains access rules which are used to
#		allow or deny connections to network services that
#		either use the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd:192.168.2.202

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值