Linux服务器ssh远程管理

Stella981
• 阅读 759

SSH远程管理

SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登陆,远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登陆时输入的用户口令,与早期的telnet(远程管理),rsh(Remote Shell ,远程执行命令),rcp(远程复制文件)等应用相比,SSH协议提供了更好的安全性。

  1. 配置OpenSSH服务端

在RHEL 5系统中,OpenSSH服务器由openssh,openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"service sshd start"命令即可按默认配置启动sshd服务,包括root在内的大部分用户(只要拥有合法的登陆Shell)都可以远程登陆系统。

Sshd服务的配置文件默认位于/etc/ssh/sshd_config,正常调整相关配置项,可以进一步提高sshd远程登陆的安全性。下面介绍最常用的一些配置项,关于sshd_config文件的更多配置可参考man手册页。

Linux服务器ssh远程管理

1. 服务监听选项

Sshd服务使用的默认端口好为22,必要时建议修改此端口号,并指定监听服务的具体ip地址,以提高在网络中的隐蔽性,除此之外,SSH协议的版本选用V2比V1的安全性更好,禁用DNS反向解析可以提高服务器的响应速度。

Linux服务器ssh远程管理

修改配置文件后需要重新加载文件:service sshd reload

服务器默认配置如下

Linux服务器ssh远程管理

2.用户登陆控制

Sshd服务默认允许root用户登陆,当在linternet中使用时这是非常不安全的,更普遍的做法是,先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。

关于sshd服务的用户登陆控制,通常应禁止root用户或密码为空的用户登陆,另外可以限制登录验证的时间(默认为2分钟)和最大重试次数,若超过限制后仍未能登陆则断开连接。

Linux服务器ssh远程管理

当希望之允许或禁止某些用户登陆时,可以使用AllowUsers或DenyUsers配置,两者用法类似(注意不要同时使用)。例如:若只允许jerry和admin用户登陆,并且admin用户仅能够从ip地址为61.23.24.25的主机远程登陆,可以参考以下操作。

AllowUsers jerry admin@61.223.24.25 //多个用户以空格分隔

3.    登陆验证方式

对于服务器的远程管理来说,除了用户账号的安全控制以外,登陆验证的方式也非常重要,sshd服务支持两种验证方式——密码验证,密钥对验证。可以设置只使用其中以正方式,也可以两种方式都启用。

  • 密码验证:以服务器中本地系统用户的登录名称,密码进行验证。这种方式使用最为简便,但冲客户机角度来看正在连接的服务器有可能被冒充,从服务器角度看当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。

  • 密钥对验证:要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥,私钥),然后将公钥文件放到服务器中的指定位置,远程登陆时,系统将使用公钥,私钥进行加密/解密关联验证,大大增强了远程管理的安全性。

    当加密验证,密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求比较高的服务器,建议将密码验证方式禁用,只允许密钥对验证方式;若没有特殊要求,则两种方式都可以启用。

Linux服务器ssh远程管理

Service sshd reload 同样需要重新加载配置文件即可生效。

5.1.2     使用SSH客户端程序

在RHEL 5系统中,OpenSSH客户端由openssh-cliente软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp,sftp远程复制和文件传输命令等,实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,例如:windows平台中的PuttyCN,WinSCP,SecureCRT等图形工具。

Linux服务器ssh远程管理

注意:如果默认端口22被改为其它端口,使用时应以上选项指定端口号。

  1. 命令程序ssh ,scp ,sftp

1)ssh远程登陆

通过ssh命令可以远程登录到sshd服务,为用户提供一个安全的Shell环境,以便对服务器进行管理和维护。使用时应指定登陆用户,目标主机地址作为参数。例如:若要登陆主机192.168.4.254,以对方的tsergyia用户进行验证,可以执行以下操作。

Ssh tsergyia@192.168.4.254

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                                             //退出

  1. 图形工具PuttyCN,WinSCP

1)PuttyCN远程登陆

Putty是一款瓶盖的Telnet/SSH图形客户端软件,能够在windows 32平台模拟xterm终端环境,主要作品为Simon Tatham,PuttyCN是对应的中文版。

使用PuttyCN时,只需运行主程序putty.exe,然后再窗口中指定远程主机的ip地址,端口号等相关信息,如下图所示,再单击"打开"按钮,根据提示接受密钥,验证密码后即可成功登录到目标主机。

Linux服务器ssh远程管理

步骤一:输入目标服务器的ip地址,端口号连接类型,点击"打开"

步骤二:在弹出的窗口中单击"是",表示接受密钥

步骤三:输入远程服务器的用户名和密码,验证成功后即可登录。

2)WinSCP远程复制

Winscp是一款用于widnows平台的SSH图形客户端软件,用来通过SCP,SFTP方式在本地与远程计算机之间安全的复制文件。WinSCP的官方网站位于http://winscp.net,建议下载.zip格式的免安装包。

使用WinSCP时,只需要运行主程序WinSCP.exe。然后在窗口中指定远程主机的ip地址,端口号等相关信息,如下图所示,再单击"登录"按钮,根据提示接受密钥,验证密码后即可成功连接到目标主机,操作界面与常见的FTP客户软件类似。

Linux服务器ssh远程管理

由于PuttyCN,WinSCP都提供了中文界面,功能和操作比较简单,因此这里不再对着两款软件做深入研究。

5.1.3 构建密钥对验证的SSH体系

正如前面所提及的,密钥对验证方式可以为远程登录提供更好的安全性,下面将学习在linux服务器,客户端中构建密钥对验证SSH体系的基本过程,如图所示。

Linux服务器ssh远程管理

  1. 在客户端创建密钥对

    在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服务器。

    Linux服务器ssh远程管理

2.将公钥文件上传至服务器

将上一步的公钥文件发送给服务器,并部署到服务器端用户的公钥数据库中。上传公钥文件时可以选择FTP,samba,HTTP甚至发送E-mail等任何方式,例如:可以通过scp方式将文件上传至服务器的/tpm/目录中。

Scp ~/.ssh/id_rsa.pub root@192.168.4.254:/tmp/(用户能够登陆ssh)

Linux服务器ssh远程管理

3.在服务器中导入公钥文本

在服务器中,目标用户(指用来远程登录的账号)的公钥数据库位于~/.ssh/目录,默认的文件名是authorized_keys。当获得客户机发送过来的公钥文件以后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库中。

Linux服务器ssh远程管理

权限更改: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的身份进行远程登录,如果密钥对验证方式配置成功,则在客户端将会要求输入私钥短语,以便调用私钥文件进行匹配(若未设置私钥短语,则直接登入目标服务器)

使用密钥对验证的方式登录时,不需要知道目标用户的密码,而是改为验证客户端用户的私钥短语并检查双方的私钥,公钥文件是否配对,安全性更好。

  1. TCP Wrappers访问控制

TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务的客户机地址进行访问控制,对应的两个策略文件为/etc/hosts.allow,/ect/deny,分别用来设置允许和拒绝的策略。

  1. 策略的配置格式

    两个策略文件的作用相反,但配置记录的格式相同,如下所示。服务程序列表,客户机地址列表之间以冒号分割,在每个列表内的多个项之间以逗号分隔。

  2. 服务程序列表

  • ALL,代表所有的服务

  • 单个服务程序。例如:"vsftpd"

  • 多个服务程序组成的列表,例如"vsftpd , sshd"

  1. 客户机地址列表
  • All,代表任何客户机地址

  • Local,代表本地地址

  • 单个ip地址,例如:"192.168.4.1"

  • 网络地址,例如:192.168.4.0/255.255.255.0或192.168.4.

  • 以"."开始的域名,例如".benet.com"匹配benet.com域中的所有主机

  • 潜入通配符"?"号代表一个字符 *代表多个字符

  1. 访问控制的基本原则

关于TCP Wrappers机制的访问策略,应用时遵循以下顺序和原则

  • 首先检查/etc/hosts.allow文件,如果找到匹配的策略,则允许访问。

  • 否则则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝

  • 如果检查上述两个文件都找不到相匹配的策略,则允许。

  • 如果连个文件中都匹配,hosts.allow生效

  1. 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

步骤四:输入用户名登录

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这