SSH远程访问
一SSH相关概念
1.1 SSH定义
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。
SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性。
1.2 SSH优点
- 数据传输是加密的,可以防止信息泄漏
- 数据传输是压缩的,可以提高传输速度
1.3 SSH的客户端和服务端
- SSH客户端:Putty、Xshell、CRT
- SSH服务端:OpenSSH
- OpenSSH 是实现 SSH 协议的开源软件项目,适用于各种 UNIX、Linux 操作系统
- CentOS 7系统默认已安装openssh相关软件包,并已将 sshd 服务添加为开机自启动
- 执行“ systemctl start sshd ”命令可启动 sshd服务
- sshd 服务默认使用的TCP的 22端口
1.4 SSH配置文件
- sshd 服务的默认配置文件是/etc/ssh/sshd_config
- ssh_config和sshd_config都是ssh服务器的配置文件
- 二者区别在于ssh_config是针对客户端的配置文件,sshd_config则是针对服务端的配置文件
二配置OpenSSH服务端
1 sshd_config配置文件的常用选项设置
Port 22 | 监听端口 22 |
ListenAddress 0.0.0.0 | 监听地址为任意网段,也可以指定OpenssH服务器的具体Ip |
LoginGraceTime 2m | 登录验证时间为2分钟 |
PermitRootLogin yes | 允许远程登录root 账号 (默认yes 允许, no 表示禁止) |
MaxAuthTries 6 | 最大重试次数为 6 (每次账号登录时,允许输入6次账号和密码) |
MaxSessions 10 | 每次连接,最大会话数为10 |
PermitEmptyPasswords no | 禁止空密码登录(默认no 禁止, yes 表示 允许) |
PasswordAuthentication yes | 启用密码验证 (默认yes 开启, no表示关闭) |
UseDNS no | 禁用DNS反向解析,以提高服务器的响应速度(no 表示禁止, yes 表示开启) |
PidFile /var/run/sshd.pid |
保存sshd 服务进程pid 号文件 |
[root@host13 ssh]# systemctl reload sshd #重新加载 sshd 配置文件 [root@host13 ssh]# systemctl restart sshd #重启 sshd 服务 [root@host13 ssh]# systemctl stop firewalld #关闭 firewalld 防火墙 [root@host13 ssh]# setenforce 0 # 设置selinux 等级为permissive # 防火墙系统默认开机自启, selinux 的设置也是 临时的, 如果重启操作系统,会失效
2 通过系统配置文件,配置登录白名单/黑名单
sshd 服务系统配置文件 : /etc/ssh/sshd_config
### 2.4.1 配置用户登录白名单/黑名单
shd 的系统配置文件 /etc/ssh/sshd_config 最后添加如下任意一行,然后重启sshd服务
AllowUsers 用户远程登录白名单(仅在该配置里的用户可以远程登录,不与 黑名单一起用)
DenyUsers 用户远程登录黑名单(在该配置里的用户禁止远程登,不与白名单一起用
服务端设置:
[root@host13 ~]# vim /etc/ssh/sshd_config #修改sshd 系统配置文件 AllowUsers zhangsan lisi@192.168.23.10 wangwu@192.168.23.0/24 zhaoliu@192.168.23.* #在配置文件最后添加白名单 [root@host13 ~]# systemctl restart sshd #重启服务
3 配置IP 登录限制
在系统配置文件 /etc/ssh/sshd_config 文件中 设置,禁止全局密码登录,并且在最后设置允许匹配网段密码登录
[root@host13 ~]# systemctl stop firewalld [root@host13 ~]# setenforce 0 [root@host13 ~]# vim /etc/ssh/sshd_config PasswordAuthentication no ...... Match Address 192.168.23.12 PasswordAuthentication yes [root@host13 ~]# systemctl restart sshd
三ssh 客户端配置及功能
1 ssh 客户端远程登录格式
ssh [-p 端口号] [-l 登录名] [登录名@]**ip/主机名** [command]
[root@host10 ~]# ssh -p 22 -l root 192.168.23.13 ps aux | grep sshd root@192.168.23.13's password: root 1399 0.0 0.2 147788 5228 ? Ss 22:14 0:00 sshd: root@pts/0 root 2962 0.0 0.2 147784 5368 ? Ss 23:16 0:00 sshd: root@pts/1 root 3069 0.0 0.2 105996 4120 ? Ss 23:20 0:00 /usr/sbin/sshd -D root 3546 3.0 0.2 147784 5284 ? Ss 23:43 0:00 sshd: root@notty
[root@host10 ~]# echo " 192.168.23.13 host13" >> /etc/hosts [root@host10 ~]# ssh host13 root@host13's password: Last login: Sat Jul 3 23:46:09 2021 from 192.168.23.10 [root@host13 ~]#
2 scp 远程复制
格式:
下行复制
scp [-r] 远程用户名@远程主机ip:远程目录或文件 本地目录
上行复制
scp [-r] 本地目录或文件 远程用户名@远程主机ip:远程目录
-r : 复制目录时,需要加上 -r 选项
[root@host10 opt]# scp root@192.168.23.13:/etc/shadow /opt/ root@192.168.23.13's password: shadow 100% 1719 2.2MB/s 00:00 [root@host10 opt]# pwd /opt [root@host10 opt]# ls rh shadow
root@192.168.23.13's password: passwd 100% 2104 1.6MB/s 00:00 [root@host10 opt]# ssh -l root 192.168.23.13 ls /opt root@192.168.23.13's password: passwd rh
注意,远程复制时,要注意远程用户的权限。
[root@host10 opt]# scp /var/log/messages zhangsan@192.168.23.13:/opt zhangsan@192.168.23.13's password: Permission denied, please try again. zhangsan@192.168.23.13's password: Permission denied, please try again. zhangsan@192.168.23.13's password: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). lost connection [root@host10 opt]# ssh -l root 192.168.23.13 ls -ld /opt root@192.168.23.13's password: drwxr-xr-x. 3 root root 30 7月 3 23:21 /opt [root@host10 opt]#
3. sftp 安全文件传输协议
sttp 协议可以远程进行文件获取,文件内容传输,文件管理登录操作。由于使用了加密/解密 技术,传输效率比普通FTP 要低,但是安全性更高,操作语法与FTP 几乎一样。SFTP使用ssh的数据通道传输,使用的端口是 tcp 22 端口。sftp 登录时,默认登录到远程用户的家目录中
[root@host10 ~]# sftp root@192.168.23.13 root@192.168.23.13's password: Connected to 192.168.23.13. sftp> pwd Remote working directory: /root sftp> cd /opt/ sftp> ls passwd rh sftp> get /opt/passwd /opt/ Fetching /opt/passwd to /opt/passwd /opt/passwd 100% 2104 1.4MB/s 00:00 sftp> put /var/log/messages /opt/ Uploading /var/log/messages to /opt/messages /var/log/messages 100% 737KB 105.8MB/s 00:00 sftp> ls messages passwd rh sftp> rm passwd Removing /opt/passwd sftp> ls messages rh sftp> quit
四sshd服务支持两种验证方式
1 密码验证
密码验证对服务器中本地系统用户的登录名称、密码进行验证。简便,但可能会被暴力破解
2 密钥对验证
密钥对验证要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证。能增强安全性,且可以免交互登录。
3 公钥和私钥的关系
公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密。
不能根据一个密钥来推算出另一个密钥。
公钥对外公开,私钥只有私钥的持有者才知道。
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。可根据实际情况设置验证方式。