SSH服务
1.SSH服务
SSH是Security Shell的缩写,是建立在应用层和传输层基础上安全协议,是目前较为安全可靠的远程登录会话和传输协议,SSH的客户端也适用于多种平台
2.SSH结构
SSH是C/S架构,即Client(客户端)/Server(服务端)结构。需要使用SSH,需要在远程创建Server服务,以及需要在本地建立客户端。版本有OpenSSH1.x和OpenSSH2.x。
3.SSH功能
可以有效防止DNS欺骗以及IP欺骗
- 压缩传输数据(可选择)
- SSH提供了多种传输方式
- SSH构建Socket5代理
4.SSH服务的安装和配置
- 安装
在安装Linux系统的时候,如果不是选择的最小化安装,SSH服务将会默认安装在系统中,无需自行安装。如果系统没有自带SSH服务,那么需要我们自行安装:
-
- RedHat 、CentOS
yum install openssh -server openssh -clients
-
- Debian、Ubuntu等DEB包的发行版
apt -get install openssh -server openssh -client
- 客户端选择
- 苹果OS X操作系统:自带terminal中包含有SSH客户端,与LinuxSSH客户端的使用方法相同
- Linux系统:OpenSSH-Client
- Windows操作系统:PuTTY、Xshell、SecureCRT、Plink、WinScp等
- 配置
在Linux操作系统中,SSH服务端配置文件默认路径是:/etc/ssh/sshd_config(服务端配置)
-
- port 22 SSH端口设置,默认是22
- Protocol 2,1 选择SSH协议版本
- ListenAddress 0.0.0.0 监听的网卡ip
- PermitRootLogin no 是否允许root登录,默认是允许的
- PasswordAuthentication yes 是否开启密码验证
- PermitEmptyPasswords no 是否允许密码为空
- PrintMotd no 登入后是否显示一些信息,如上次登入时间、地点等
- PrintLastLog yes 显示上次登入的信息
- KeepAlive yes 发送KeepAlive信息给客户端,解决的是服务端僵尸进程的问题
- MaxStartups 10 允许尚未登录的联机画面数(已经联机,但是还没有登录)
- DenyUsers * 禁止用户登录,*表示所有用户
- AllowUsers * 允许用户登录
5.SSH的认证方式与访问策略
- 口令认证
口令是SSH服务的基础认证方式,在不对SSH进行相应配置的情况下,口令认证方式是默认启用的。
在Linux操作系统中,使用SSH客户端的命令格式如下:
ssh options username@hostname 'command'
- 密钥认证
密钥认证是Linux运维中常用的较为安全的认证方式,由于无需输入口令,因此在自动化运维以及集群运维中较多
-
- 生成密钥和公钥文件 ssh-keygen 命令可以生成公钥和密钥
需要输入生成密钥文件的保存地址,默认为 ~/.ssh目录下,命名为id_rsa.pub文件
确认是否需要给密钥文件设置口令密码,无需设置
密钥和公钥文件保存路径
-
- 将公钥文件加入到主机的认证文件中 cat id_rsa.pub >> ~/.ssh/authorized_keys(注意: .ssh目录权限为700,authorized_keys文件权限为600)
- 创建系统所需要的ssh认证文件,touch authorized_keys
- 将公钥文件内容写入到创建的ssh认证文件中,cat id_rsa.pub >> authorized_keys
- 查看或者编辑ssh的认证文件
- 将公钥文件加入到主机的认证文件中 cat id_rsa.pub >> ~/.ssh/authorized_keys(注意: .ssh目录权限为700,authorized_keys文件权限为600)
-
-
- 修改ssh认证文件的权限,chmod 600 authorized_keys
- 客户端密钥连接,通过xftp将密钥文件复制在客户端主机上,xftp连接之后,进入密钥存放路径,这里由于.ssh文件夹是隐藏文件夹,所以需要在xftp的工具-->选项-->常规中勾选显示隐藏文件
- 进入.ssh目录,将id_rsa文件下载到客户端主机
- 测试使用非口令验证(密钥验证),使用ssh客户端连接Linux主机
-
- 访问策略-限制用户连接SSH
在/etc/ssh/sshd_config文件中配置
DenyUsers test 禁止用户登入
AllowUsers test 允许用户登入
DenyGroups test 禁止群组登入
AllowGroups test 允许群组登入
注意:修改配置文件后,服务需要重启
- 访问策略-限制ip连接SSH
- iptables防火墙
- iptables -A INPUT -p tcp --dport 22 -s 192.168.1.104/32 -j ACCEPT #允许ip为192.168.1.104的主机访问22端口
- iptables -A INPUT -p tcp --dport 22 -j DROP #组织所有ip访问本机22端口
- iptables防火墙
iptables限制ssh访问是基于端口的
-
- TCP Wrappers(推荐使用)
-
在/etc/host.allow文件中配置允许访问ip
-
- TCP Wrappers(推荐使用)
sshd:192.168.1.104/255.255.255.255
-
-
- 在/etc/host.deny文件中配置禁止ip访问
-
sshd:ALL 或者sshd:ALL EXCEPT 192.168.1.104
TCP Wrappers只支持长格式掩码,不能用192.168.1.104/24
6.SSH运维常用参数
- SSH执行远程主机命令
获取远程主机当前系统时间,并以“主机名:时间”格式保存在本地的remote.txt文件中。
ssh root@192.168.1.149 ‘echo ${HOSTNAME}: `date +%Y-%m-%d\ %H:%m:%S`’ >> remote.txt
- SSH构建跳板隧道
hostA(104)主机可以直接访问,hostB(103)主机只允许通过hostA访问,用ssh构建从本机到hostB的访问
- 在Windows系统下,有一个plink.exe程序: plink.exe -t root@192.168.1.104 ssh 192.168.1.103
-t 属性,构建了一个伪终端
ssh -t hostA hostB
- 执行密钥路径
默认,密钥存放在/home/userName/.ssh目录下,也可以通过-i来指定
- -p指定ssh端口
- -l指定用户(也可以通过 userName@hostName)
- -F指定配置文件
- -t指定伪终端迫使SSH客户端以交互模式工作,常配合expect使用
示例:ssh -l test 192.168.1.149 -i ~/mykey -p 122 -F ~/myConfig
- 调试模式与绑定ip
调试: ssh -v hostName
(-v参数以类似log的形式返回debug信息,可以帮助运维人员在SSH连接出现问题的时候快速查找问题)
绑定ip: ssh -b 192.168.1.104 root@192.168.1.149(表示从192.168.1.104这个ip与192.168.1.149简历ssh连接)
(绑定ip多用于我们的SSH客户端有多个ip地址,分不清到底是哪一个ip连接到了SSH服务)
- 构建Socket5代理
实例:hostA可以访问www.website.com站点,hostB无法直接访问该站点,现在要求hostB访问该站点。。。(国内访问谷歌)
访问谷歌的两个必要条件
第一,需要有可以访问谷歌的(国外)主机或者虚拟主机也可;
第二,需要有效的用户,普通权限用户即可
plink.exe userName@hostName [-i userPk.ppk] -D 2015 (用户通过密钥验证,打开2015端口访问主机)
在fireFox浏览器-->选项-->高级-->网络-->设置-->>手动配置代理 127.0.0.1 p:2015