SSH远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登陆,远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登陆时输入的用户口令,与早期的telnet(远程管理),rsh(Remote Shell ,远程执行命令),rcp(远程复制文件)等应用相比,SSH协议提供了更好的安全性。
- 配置OpenSSH服务端
在RHEL 5系统中,OpenSSH服务器由openssh,openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"service sshd start"命令即可按默认配置启动sshd服务,包括root在内的大部分用户(只要拥有合法的登陆Shell)都可以远程登陆系统。
Sshd服务的配置文件默认位于/etc/ssh/sshd_config,正常调整相关配置项,可以进一步提高sshd远程登陆的安全性。下面介绍最常用的一些配置项,关于sshd_config文件的更多配置可参考man手册页。
1. 服务监听选项
Sshd服务使用的默认端口好为22,必要时建议修改此端口号,并指定监听服务的具体ip地址,以提高在网络中的隐蔽性,除此之外,SSH协议的版本选用V2比V1的安全性更好,禁用DNS反向解析可以提高服务器的响应速度。
修改配置文件后需要重新加载文件:service sshd reload
服务器默认配置如下
2.用户登陆控制
Sshd服务默认允许root用户登陆,当在linternet中使用时这是非常不安全的,更普遍的做法是,先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
关于sshd服务的用户登陆控制,通常应禁止root用户或密码为空的用户登陆,另外可以限制登录验证的时间(默认为2分钟)和最大重试次数,若超过限制后仍未能登陆则断开连接。
当希望之允许或禁止某些用户登陆时,可以使用AllowUsers或DenyUsers配置,两者用法类似(注意不要同时使用)。例如:若只允许jerry和admin用户登陆,并且admin用户仅能够从ip地址为61.23.24.25的主机远程登陆,可以参考以下操作。
AllowUsers jerry admin@61.223.24.25 //多个用户以空格分隔
3. 登陆验证方式
对于服务器的远程管理来说,除了用户账号的安全控制以外,登陆验证的方式也非常重要,sshd服务支持两种验证方式——密码验证,密钥对验证。可以设置只使用其中以正方式,也可以两种方式都启用。
密码验证:以服务器中本地系统用户的登录名称,密码进行验证。这种方式使用最为简便,但冲客户机角度来看正在连接的服务器有可能被冒充,从服务器角度看当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
密钥对验证:要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥,私钥),然后将公钥文件放到服务器中的指定位置,远程登陆时,系统将使用公钥,私钥进行加密/解密关联验证,大大增强了远程管理的安全性。
当加密验证,密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求比较高的服务器,建议将密码验证方式禁用,只允许密钥对验证方式;若没有特殊要求,则两种方式都可以启用。
Service sshd reload 同样需要重新加载配置文件即可生效。
5.1.2 使用SSH客户端程序
在RHEL 5系统中,OpenSSH客户端由openssh-cliente软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp,sftp远程复制和文件传输命令等,实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,例如:windows平台中的PuttyCN,WinSCP,SecureCRT等图形工具。
注意:如果默认端口22被改为其它端口,使用时应以上选项指定端口号。
- 命令程序ssh ,scp ,sftp
1)ssh远程登陆
通过ssh命令可以远程登录到sshd服务,为用户提供一个安全的Shell环境,以便对服务器进行管理和维护。使用时应指定登陆用户,目标主机地址作为参数。例如:若要登陆主机192.168.4.254,以对方的tsergyia用户进行验证,可以执行以下操作。
Yes //接受密钥
123456 //输入用户密码
当用户第一次登录SSH服务器时,必须接受服务器发来的RSA密钥(根据提示输入yes)后才能继续验证,接收的密钥信息将保存到~/.ssh/known_hosts文件中(保存在客户机中),密钥验证成功以后,就登陆到目标服务器的命令环境中了,就好比把客户机的显示器,键盘连接到服务器上一样。
Whoami //确认当前用户
/sbin/ifconfig eth0 //确认是否是服务器ip地址
如果sshd服务器使用了非默认的端口号(如2345),则在登录时必须通过"-p"(小写)选项指定端口号。例如:一下操作将访问主机192.168.4.22的2345端口,以对方为jerry用户验证登录。
Ssh -p 2345 jerry@192.168.4.22
2)scp远程复制
通过scp命令可以利用SSH安全连接与远程主机相互复制文件,使用scp命令时,除了必须指定复制源,目标以外,还应指定目标主机地址,登录用户,执行后提示验证口令即可。例如:以下操作分别演示了下行,上行复制的操作过程,将远程主机中的/etc/passwd文件复制到本机,并将本机的/etc/vsftpd/目录复制到远程主机。
下行:Scp root@192.168.4.254:/etc/passwd(源) /root/pwd254.txt(目的)
注意:目标主机用户root(要允许ssh登录),(注意root用户要有读取权限)
上行:scp -r(目录) /etc/vsftpd/(源) root@192.168.4.254:/opt/(目的)
注意:用户还是远程主机用户,要能有写入权限
3)sftp安全FTP
通过sftp命令可以利用SSH安全连接与远程主机上传,下载文件,采用了与FTP类似的登录过程和交互式环境,便于目录资源管理。例如:以下操作依次演示了sftp登录,浏览,文件上传等过程。
Sftp root@192.168.4.244 //登陆
Ls //查看(远程主机)
!ls //查看(bending客户机)
Put(或mput) /boot/config-2.3.18-194.el5 //上传文件
Get(或mget) //下载文件
Bye //退出
- 图形工具PuttyCN,WinSCP
1)PuttyCN远程登陆
Putty是一款瓶盖的Telnet/SSH图形客户端软件,能够在windows 32平台模拟xterm终端环境,主要作品为Simon Tatham,PuttyCN是对应的中文版。
使用PuttyCN时,只需运行主程序putty.exe,然后再窗口中指定远程主机的ip地址,端口号等相关信息,如下图所示,再单击"打开"按钮,根据提示接受密钥,验证密码后即可成功登录到目标主机。
步骤一:输入目标服务器的ip地址,端口号连接类型,点击"打开"
步骤二:在弹出的窗口中单击"是",表示接受密钥
步骤三:输入远程服务器的用户名和密码,验证成功后即可登录。
2)WinSCP远程复制
Winscp是一款用于widnows平台的SSH图形客户端软件,用来通过SCP,SFTP方式在本地与远程计算机之间安全的复制文件。WinSCP的官方网站位于http://winscp.net,建议下载.zip格式的免安装包。
使用WinSCP时,只需要运行主程序WinSCP.exe。然后在窗口中指定远程主机的ip地址,端口号等相关信息,如下图所示,再单击"登录"按钮,根据提示接受密钥,验证密码后即可成功连接到目标主机,操作界面与常见的FTP客户软件类似。
由于PuttyCN,WinSCP都提供了中文界面,功能和操作比较简单,因此这里不再对着两款软件做深入研究。
5.1.3 构建密钥对验证的SSH体系
正如前面所提及的,密钥对验证方式可以为远程登录提供更好的安全性,下面将学习在linux服务器,客户端中构建密钥对验证SSH体系的基本过程,如图所示。
在客户端创建密钥对
在linxu客户机中,通过ssh-keygen工具为当前用户创建密钥对文件,可用的加密算法为RSA或DSA("ssh-keygen"命令的"-t"选项用于指定算法类型)。例如:以zhangsan用户登录到客户机,并生成基于RSA算法的SSH密钥对(公钥。私钥)文件,操作如下:
Ssh-keygen -t rsa
---------------------------------.//指定私钥位置
--------------------------------//设置私钥短语
-------------------------------//确认所设置的短语
上述操作过程中,提示指定私钥文件的存放位置时,一般直接按Enter键即可,最后生成的私钥,公钥文件默认存放在宿主目录中的隐藏文件夹.ssh/下,私钥短语用来对私钥文件进行保护,当使用该私钥验证登录时必须正确提供此处所设置的短语。尽管不设置私钥短语也是可以的(实际无口令登陆),但从安全假赌考虑不建议这么做。
Ls -lh ~/.ssh/id_rsa* //确认生成的密钥文件
新生成密钥对文件中,id_rsa是私钥文件,权限默认为600,对于私钥文件必须妥善保管,不能泄露给他人,id_rsa.pub是公钥文件,用来提供给SSH服务器。
2.将公钥文件上传至服务器
将上一步的公钥文件发送给服务器,并部署到服务器端用户的公钥数据库中。上传公钥文件时可以选择FTP,samba,HTTP甚至发送E-mail等任何方式,例如:可以通过scp方式将文件上传至服务器的/tpm/目录中。
Scp ~/.ssh/id_rsa.pub root@192.168.4.254:/tmp/(用户能够登陆ssh)
3.在服务器中导入公钥文本
在服务器中,目标用户(指用来远程登录的账号)的公钥数据库位于~/.ssh/目录,默认的文件名是authorized_keys。当获得客户机发送过来的公钥文件以后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库中。
权限更改:chown lisi:lisi .ssh/
Chmod 700 .ssh/
在公钥库authorized_keys文件中,最关键的内容是"ssh-rsa加密字串"部分,当导入非ssh-keygen工具创建的公钥文本时,应确保此部分信息完整。
由于sshd服务默认采用严格的权限测试模式,因此还需要注意公钥库文件authorized_keys的权限——要求是登录的目标用户或root,同组或其他用户对该文件不能有写入权限,否则可能无法成功使用密钥对验证
除此之外,应该确认sshd服务支持密钥对验证方式,具体参考上述登录验证方式设置。
还有一种方法:
在客户机操作
端口必须为22,操作完以后可以更改。
ssh-copy-id -I /root/.ssh/id_rsa.pub zhangsan@192.168.4.254
注释:意思是zhangsan用户也用lisi在客户机上生成的(公钥和私钥)登录同一台服务器,可使用此方式。
4.在客户端使用密钥对验证
当私钥文件(客户端),公钥文件(服务器)均部署到位以后,就可以在客户机中进行测试了,首先确认客户机中当前的用户为zhangsan,然后通过ssh命令以服务器端用户lisi的身份进行远程登录,如果密钥对验证方式配置成功,则在客户端将会要求输入私钥短语,以便调用私钥文件进行匹配(若未设置私钥短语,则直接登入目标服务器)
使用密钥对验证的方式登录时,不需要知道目标用户的密码,而是改为验证客户端用户的私钥短语并检查双方的私钥,公钥文件是否配对,安全性更好。
- TCP Wrappers访问控制
TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户机地址进行访问控制,对应的两个策略文件为/etc/hosts.allow,/ect/deny,分别用来设置允许和拒绝的策略。
策略的配置格式
两个策略文件的作用相反,但配置记录的格式相同,如下所示。服务程序列表,客户机地址列表之间以冒号分割,在每个列表内的多个项之间以逗号分隔。
服务程序列表
ALL,代表所有的服务
单个服务程序。例如:"vsftpd"
多个服务程序组成的列表,例如"vsftpd , sshd"
- 客户机地址列表
All,代表任何客户机地址
Local,代表本地地址
单个ip地址,例如:"192.168.4.1"
网络地址,例如:192.168.4.0/255.255.255.0或192.168.4.
以"."开始的域名,例如".benet.com"匹配benet.com域中的所有主机
潜入通配符"?"号代表一个字符 *代表多个字符
- 访问控制的基本原则
关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则
首先检查/etc/hosts.allow文件,如果找到匹配的策略,则允许访问。
否则则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝
如果检查上述两个文件都找不到相匹配的策略,则允许。
如果连个文件中都匹配,hosts.allow生效
- TCP Wrappers 配置实例
例如:若只希望从ip地址为61.23.24.25的主机或者位于192.168.2.0/24网段的主机访问sshd服务,其他所有地址将被拒绝,可以执行以下操作。
Vim /etc/hosts.allow
Sshd:61.23.24.25,192.168.2.*
Vim /etc/hosts.deny
Sshd:ALL
补充:在windows 7系统中安装PuttyCN客户端,并使用密钥对验证的方式登录远程的SSH服务器(密钥转换)
步骤一:使用winscp工具将私钥复制到win 7上
步骤二:使用puttygen工具转换私钥——load——在文档中*.*——save private key
步骤三:putty登录——在左侧ssh中——auth——选择私钥文件——open
步骤四:输入用户名登录