SSH远程访问以及控制

简介: SSH远程访问以及控制

一、SSH远程管理基本简介


SSH协议:


SSH协议是一种安全通道协议,主要是用来实现字符界面的远程登录、远程复制等功能

相比于Telnet、RSH、RCP等安全性更高

默认端口: TCP 22


OpenSSH服务端:


OpenSSH是由openssh和openssh-server等软件包提供的

Linux系统默认已经将sshd添加为标准的系统服务

服务名称: sshd

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

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


二、OpenSSH服务端相关配置


因为主配置文件里大多都是以 # 开头的注释行,所以一般可以直接在主配置文件末尾添加选项,当然添加之前还是要确认所加的选项有没有


******相关服务监听选项
[root@ssh1 ~]# vim /etc/ssh/sshd_config 
。。。。。。
Port   22 (监听端口,默认22)
ListenAddress   监听地址
Protocol  ssh协议版本  
USEDNS  no  (禁用DNS反向解析)
******相关的用户登录控制选项
[root@ssh1 ~]# vim /etc/ssh/sshd_config 
。。。。。。
LoginGraceTime 2m        (登录验证时间: 默认2 分钟)
PermitRootLogin yes      (默认是“yes”,表示允许root 用户登录)
PermitEmptyPasswords no  (默认禁止空密码账户登录)
MaxAuthTries 6           (最大的重试次数)
DenyUsers   用户         (拒绝这个用户在任何机器上使用ssh 远程登录;如果拒绝多个用户中间用空格隔开)
DenyUsers   用户@IP地址  (拒绝这个用户在对应的IP地址的机器上进行远程ssh 登录)
AllowUsers   用户名      (仅允许某个用户通过ssh 远程登录)
AllowUsers  用户名@IP地址    (仅允许某个用户通过对应地址的主机进行SSH远程登录)
(注意: DenyUsers 选项和AllowUsers 选项不要同时使用)


三、SSH客户端程序的登录以及使用


在Linux主机上登录Linux服务器的方法(格式):


[root@ssh1 ~]#ssh 用户名@登录Linux服务器的地址 -p 端口号


-登录验证方式


登录验证的方式有两种:


(1)密码验证: 服务器对本地系统用户进行用户名和密码验证 容易受到暴力破解

(2)密钥对验证: 在客户端上创建密钥文件 (公钥和私钥) ,公钥上传到服务器指定位置,私钥自己保留,远程登录时进行加密、解密关联认证,增强远程管理安全性

注意:当两种验证方式都启用时,服务器优先使用密钥对验证,对于安全性较高的服务器,建议关闭密码验证


(公钥和私钥可以相互解密,但是不能相互推算,只有私钥能解密公钥,公钥也同样只有私钥可以解密)

******主配置文件的配置选项
[root@ssh1 ~]# vim /etc/ssh/sshd_config 
。。。。。。
PasswordAuthentication yes                    (密码验证方式开启)
PubkeyAuthentication yes                      (密钥对验证开启)
AuthorizedKeysFile      .ssh/authorized_keys  (指定公钥库位置)


-SSH客户端程序的使用


OpenSSH客户端: 由openssh-clients软件包提供 (linux系统默认已经安装) ,包括ssh远程登录命令,以及scp远程复制和sftp文件传输命令


(1)ssh远程登录:


  • 通过第三方工具使用ssh进行远程登录 (如Xshell、CRT、Putty等图形化工具)
  • 命令登录:


[root@ssh1 ~]# ssh 用户名@主机地址 -p 端口号



(端口号默认就是22,所以可以不用跟-p选项,除非修改了ssh的端口号,就需要指定ssh端口号)


(2)scp远程复制


语法结构:

[root@ssh1 ~]# scp root@对方的地址:对方文件位置 本地位置 
(回车后,按照提示输入对方root账户的密码)
示例: 
******将192.168.100.7主机的root目录下的AAA.txt文件复制到本机的root目录下,使用root账户登录
[root@ssh2 ~]# scp root@192.168.100.7:/root/AAA.txt  /root/  
The authenticity of host '192.168.100.7 (192.168.100.7)' can't be established.
ECDSA key fingerprint is SHA256:weaks0wagWSeyPZfM99IlV/pbISthvV5FMnczNdtcj4.
ECDSA key fingerprint is MD5:af:d9:66:c2:45:b3:c6:8e:0b:53:07:99:d7:8f:a0:06.
Are you sure you want to continue connecting (yes/no)? yes  (会询问是否进行连接,输入yes即可)
Warning: Permanently added '192.168.100.7' (ECDSA) to the list of known hosts.
root@192.168.100.7's password:    (输入root账户的密码)
AAA.txt                        100%    0     0.0KB/s   00:00     (显示传输完毕)
[root@ssh2 ~]# ls    (查看/root下发现多了一个AAA.txt)
AAA.txt  anaconda-ks.cfg
******将本地root目录下的bbb目录复制到192.168.100.8主机下的root目录里
[root@ssh1 ~]# scp -r /root/bbb root@192.168.100.8:/root/  (复制目录需要加-r选项)
The authenticity of host '192.168.100.8 (192.168.100.8)' can't be established.
ECDSA key fingerprint is SHA256:k2YVo9hnbXnXqpinsSIIKc+xwNr0DYFgwd5J6thuuaU.
ECDSA key fingerprint is MD5:6a:9d:38:87:6f:67:63:b2:87:30:a0:4e:9e:1b:8f:a2.
Are you sure you want to continue connecting (yes/no)? yes   (输入yes)
Warning: Permanently added '192.168.100.8' (ECDSA) to the list of known hosts.
root@192.168.100.8's password:   (输入密码)
传输完毕后切换到192.168.100.8主机,发现root目录下多了一个bbb目录
[root@ssh2 ~]# ls
AAA.txt  anaconda-ks.cfg  bbb

(3)sftp文件传输 (安全的ftp)


语法结构:

登录
[root@ssh2 ~]# sftp 用户名@对方地址 (按回车输入密码)
下载
sftp>get 文件名 
上传
sftp>put 文件名
退出登录
sftp>bye 或 exit
示例:
******登录主机192.168.100.8
[root@ssh1 ~]# sftp root@192.168.100.8
root@192.168.100.8's password:   (输入密码)
Connected to 192.168.100.8.
sftp> get aaa.txt   (下载aaa.txt文件)
Fetching /root/aaa.txt to aaa.txt
sftp> put bbb.txt   (上传bbb.txt文件)
Uploading bbb.txt to /root/bbb.txt
bbb.txt                        100%    0     0.0KB/s   00:00    
sftp> bye           (退出登录)
[root@ssh1 ~]# ls   (查看root目录下,发现多了aaa.txt文件)
aaa.txt  anaconda-ks.cfg  bbb.txt

四、构建密钥对验证的SSH体系


Linux主机 ip地址
ssh1 192.168.100.7
ssh2 192.168.100.8


要求: ssh2主机中的boss账户可以通过密钥对验证体系登录ssh1主机

步骤:

******在ssh2主机上创建boss账户,并且创建密钥对
[root@ssh2 ~]# useradd boss
[root@ssh2 ~]# passwd boss
更改用户 boss 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
******切换成boss账户登录,并且使用ecdsa的加密方式创建密钥对文件
[root@ssh2 ~]# su - boss
[boss@ssh2 ~]$ ssh-keygen -t ecdsa   (连续按三次回车即可)
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/boss/.ssh/id_ecdsa):  (私钥公钥存放位置)
Created directory '/home/boss/.ssh'.
Enter passphrase (empty for no passphrase):  
Enter same passphrase again:   
Your identification has been saved in /home/boss/.ssh/id_ecdsa.
Your public key has been saved in /home/boss/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:DngxV6VMBECrjdfAeFpPZx6vJjfMEINGeCdaquWh7yI boss@ssh2
The key's randomart image is:
+---[ECDSA 256]---+
|     o+..o+..    |
|    .++o.+ .     |
|    .=@o= *      |
|    =X O * o     |
|   ==.= S . .    |
|  o .o o + .     |
|   .    o B      |
|E . .    + .     |
| . o.            |
+----[SHA256]-----+
密钥对文件的默认位置:/home/boss/.ssh/
id_ecdsa(私钥文件)id_ecfsa.pub(公钥文件)
[boss@ssh2 ~]$ ll /home/boss/.ssh
总用量 8
-rw------- 1 boss boss 227 12月 16 18:53 id_ecdsa
-rw-r--r-- 1 boss boss 171 12月 16 18:53 id_ecdsa.pub
******把公钥文件上传给ssh1主机的tmp目录下
[boss@ssh2 ~]$ scp /home/boss/.ssh/id_ecdsa.pub root@192.168.100.7:/tmp
The authenticity of host '192.168.100.7 (192.168.100.7)' can't be established.
ECDSA key fingerprint is SHA256:weaks0wagWSeyPZfM99IlV/pbISthvV5FMnczNdtcj4.
ECDSA key fingerprint is MD5:af:d9:66:c2:45:b3:c6:8e:0b:53:07:99:d7:8f:a0:06.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.7' (ECDSA) to the list of known hosts.
root@192.168.100.7's password: 
id_ecdsa.pub                   100%  171   193.1KB/s   00:00  (传输完成)
******切换到ssh1主机上,创建boss用户,并且在boss的家目录中创建公钥数据库的存放目录.ssh
[root@ssh1 ~]# useradd boss
[root@ssh1 ~]# mkdir -p /home/boss/.ssh  
******把ssh2发送过来的公钥文件的内容追加到刚刚创建的公钥数据库中并且指定文件名为authorized_keys
[root@ssh1 ~]# cat /tmp/id_ecdsa.pub >> /home/boss/.ssh/authorized_keys
******在ssh2主机上使用密钥对验证登录ssh1的boos用户
[boss@ssh2 ~]$ ssh boss@192.168.100.7
Last login: Wed Dec 16 19:07:24 2020 from 192.168.100.8
[boss@ssh1 ~]$     
不用输入密码,直接就可以使用boss用户登录到ssh1主机

五、TCP Wrappers访问控制


定义: 一种防护机制,作为应用服务与网络之间的一道特殊防线,提供额外的安全保障(类似于ACL)


工作原理: 将TCP服务程序 包裹 起来,监听TCP服务程序端口,增加一个安全检测过程,外来的链接请求必须通过这层安全检测,获得许可后,才可以真正的访问服务程序

CentOS7.3上默认的软件包: tcp_wrappers-7.6-77.el7.x86_64


提供: 执行程序tcpd 和共享链接库文件libwrap.so.*


保护机制的两种实现方式:


(1)直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd

(2)其他的服务程序调用libwrap.so.*链接库,不需要运行tcpd (应用更广泛,更有效率)


查看程序的共享库:

[root@ssh1 ~]# ldd /usr/sbin/sshd | grep "libwrap" 
  libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f90ca8a6000)


TCP Wrappers对应的两个策略文件:


(1)/etc/hosts.allow: 用来设置允许策略

(2)/etc/hosts.deny: 用来设置拒绝策略


策略的配置格式: 服务程序列表:客户端地址列表

(1)服务程序列表

ALL: 表示所有服务

单个服务: 直接写服务名

例:httpd、ftpd等

多个服务程序: 服务名中间以 , 隔开

例:httpd,sshd

(2)客户端地址列表

ALL: 任何客户端

LOCAL: 本机地址

单个IP: 直接写一个IP

例:192.168.100.1

网段地址:

例: 192.168.100.0/255.255.255.0 (表示192.168.100.0 这个网段)

以"."开始的域名: 所有的以同一个域名后缀结尾的主机

例:.baidu.com (也就是说前面不管是www还是mail只要是后缀是.baidu.com的都符合这个域名地址)

以"." 结束的网络地址: 表示一个网段


例:192.168.10. (表示192.168.10.0网段)


访问控制的基本原则:


(1)先检查/etc/hosts.allow 文件,找到相匹配的策略,就允许访问

(2)然后继续检查/etc/hosts.deny ,如果找到相匹配的策略,则拒绝

(3)如果检查两个文件都没有匹配的策略,则允许访问

目录
相关文章
|
4月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
271 0
|
11月前
|
关系型数据库 MySQL 网络安全
mysql只能通过ssh通道连接到内网,如何创建只能访问MySQL的SSH用户
mysql只能通过ssh通道连接到内网,如何创建只能访问MySQL的SSH用户
380 0
|
4月前
|
算法 安全 Shell
SSH:加密安全访问网络的革命性协议
SSH:加密安全访问网络的革命性协议
144 9
|
29天前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
75 7
|
4月前
|
安全 Linux 网络安全
SSH 简介:安全远程访问的利器
SSH是加密网络协议,用于安全远程登录和数据传输。它基于公钥和私钥验证,加密传输确保通信安全。默认使用22端口。在Linux和macOS系统上预装,Windows需额外安装。基本用法包括远程登录(ssh username@hostname)、文件传输(scp source destination)和端口转发。推荐使用密钥对认证,限制登录尝试次数,并配置SSH代理以增强安全性。了解这些基础和技巧能提升远程服务器管理和文件传输效率。
50 3
SSH 简介:安全远程访问的利器
|
4月前
|
机器学习/深度学习 Linux 网络安全
ssh远程访问windows系统下的jupyterlab
ssh远程访问windows系统下的jupyterlab
76 3
|
4月前
|
弹性计算 运维 Shell
基于key验证多主机ssh访问
【4月更文挑战第30天】
54 1
|
4月前
|
存储 网络协议 Linux
如何使用内网穿透工具实现远程SSH访问Deepin系统
如何使用内网穿透工具实现远程SSH访问Deepin系统
|
4月前
|
存储 安全 网络安全
Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析
SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制。在使用 SSH 连接到远程 Git 存储库时,您可以使用 SSH 密钥对来确保安全性。以下是关于如何生成和使用 SSH 密钥对的详细步骤: 生成 SSH 密钥对
314 2
|
4月前
|
监控 安全 网络安全
局域网管理监控的远程访问控制:利用SSH和Python实现安全管理
在当今数字化时代,局域网管理监控对于确保网络安全至关重要。远程访问控制是一项关键任务,通过利用SSH(Secure Shell)和Python编程语言,我们可以实现更加安全的管理方法。本文将介绍如何使用这两者结合,为局域网管理提供可靠的远程访问控制。
260 1