SSH服务的介绍
SSh 是Secure Shell 的缩写,是简历在应用层和传输层基础上的安全协议。SSh是目前较为安全可靠的远程登录会话和传输协议。目前绝大多数的Linux都采用ssh远程登录方式且SSH客户端适合用于多种平台。
SSH 的服务结构
ssh 是C/S架构,即Client/server(客户端和服务器端)结构
目前,SSH有1.x和2.x的两个版本。连接ssh服务是要注意客户程序与SSH服务端版本是否一致。Openssh2.X同时支持SSH1.x和2.x
SSH 服务的功能
SSH可有效的防止DNS欺骗以及IP欺骗
压缩传输数据
SSH提供多种传输方式
SSH构建Socket5代理
SSH服务的安装与配置
1. 安装
如果在安装系统时,不是选择最小化安装,SSH服务都讲会默认安装在系统中,无须自行安装。如果系统没有自带SSH服务,可按照如下情况自行安装。
*Redhat 、Centos 等使用RPM包的发行版
yum install openssh-server openssh-clients
*Debian 、Ubuntu 等使用DEB包发行版
apt-get install openssh-server open ssh-client
其中openssh-server 是ssh服务端软件,openssh-client为ssh的客户端软件
2. ssh客户端的选择
SSH客户端支持多平台
*苹果OS X操作系统
自带terminal中包含有ssh客户端,与Linux ssh客户端使用方法相同
*linux 操作系统
OpenSSH-client
* windows操作系统
Putty 、xshell 、secureCrt 、WinsSCP 、 plink 等
3. SSH配置文件说明
在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 * #允许用户登录
SSH的认证方式与访问策略
1. SSH配置基于口令的认证方式
口令是ssh服务的基础认证方式,在不对SSH进行相应配置的情况下口令认证方式是默认启用的
2. SSH配置基于秘钥的认证方式
秘钥认证是linux运维中常用较为安全的认证方式,由于无须输入口令,固永远与自动化与集群运维中。
生成秘钥与公钥文件
ssh—keygen 生成公钥与秘钥
将公钥文件加入主机的认证文件中
cat id_rsa.pub >> ~/ .ssh/authorized_keys
注意.ssh目录权限为700,authorized_keys文件为600
3. 基于用户的访问策略需要在SSH服务的配置文件中进行配置
/etc/ssh/sshd_config
DenyUsers test #禁止test用户登入
AllowUsers test #允许test用户登入
DenyGroups test #禁止test群组登入
AllowUsers test #允许test群组登入
4. 基于IP地址的访问策略有两种方式实现:
iptables防火墙
iptables -A INPUT -p tcp --dport 22 -s 192.168.0.10/32 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
5. TCP Wrappers
/etc/hosts.allow
sshd:192.168.0.10/255.255.255.255
/etc/hosts.deny
sshd:ALL 或 sshd:ALL EXCEPT 192.168.0.10
TCP Wrappers只支持长格式掩码,不能用192.168.0.0/24
SSH运维常用参数
Linux下的SSH客户端可以配合SSH服务端实现多种需求,在运维工作中,熟练的使用SSH客户端可以解决很多棘手的问题。
SSH执行远程主机命令
SSH构建跳板隧道
SSH指定密钥路径、端口、用户及配置文件
调式模式与绑定IP地址
构建Socket5代理
实战示例:
获取远程主机当前系统时间,并以“主机名: 时间”的格式保存在本地remote.txt文件中。
SSH执行远程主机命令的格式
ssh username@hostname ‘command’
对应格式编写示例:
实战示例:
hostA可直接访问,hostB只允许hostA访问,用过SSH构建本地到B的连接通道。
命令格式:
ssh –t hostA ssh hostB
示例:
ssh –t 192.168.1.10 ssh 10.0.0.10
首先与192.168.1.10建立SSH连接,并通过此连接10.0.010建立SSH连接。
SSH指定密钥路径、端口、用户及配置文件
-i 指定密钥路径
-p 指定SSH端口
-l 指定用户
-F 指定配置文件
-t 指定为终端迫使SSH客户端以交互模式工作,常配合expect使用
示例:ssh -l test 192.168.1.10 -i ~/mykey –p 2015 –F ~/myconfig
以test用户连接192.168.1.10主机 使用当前用户家目录下mykey文件作为密钥文件 指定访问远程主机的2015端口 并使用myconfig作为本地ssh客户端设置
调试模式与绑定IP
调试模式
ssh -v hostname
-v参数以类似log的形式返回debug信息,可以帮助运维人员在SSH连接出现问题时快速查找问题。
绑定IP
如果你的SSH客户端有多于两个以上的IP地址,你就不可能分得清楚到底是哪一个IP地址连接到了SSH服务。
ssh –b 192.168.1.10 root@10.0.0.10
示例中的命令表示为从192.168.1.10这个IP来与10.0.0.10建立SSH连接。
构建Socket5代理
成功建立SSH隧道后,在浏览器中(IE不支持Socket5代理,推荐使用Firefox)设置Socket5代理,填写指定的2015端口即可通过hostA网络获取本地受限的网络资源
实战实例:
hostA可访问www.website.com,hostB无法直接访问该站点。现要求hostB可访问该站点。
windows客户端下需使用Plink或MyEntunnel,这里以小巧的Plink为例
在hostB中将plink复制到C盘根目录下,在提示符窗口(cmd.exe)中执行以下命令:
plink username@hostA –D 2015
(未完待续……欢迎大家提意见)