SSH远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早期的Telnet、RSH(Remote Shell,远程执行命令)、RCP(Remote File Copy,远程文件复制)等应用相比,SSh协议提供了更好的安全性。
配置OpenSSH服务端
在CentOS7系统中,openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行"systemctl start sshd"命令即可启动sshd服务,包括root在内的大部分用户(只要拥有合法的登录shell)都可以远程登录系统。
sshd服务的配置文件默认位于/etc/ssh/sshd_config目录下,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。下面介绍最常用的一些配置项,关于sshd_config文件的更多配置可参考man手册。
服务监听选项
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。除此之外,ssh协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。
1. [root@localhost ~]# vim /etc/ssh/sshd_config 2. Port 22 //监听端口号为22 3. ListenAddress 0.0.0.0 //监听地址为0.0.0.0 4. Protocol 2 //使用SSH V2协议 5. …… 6. UseDNS no //禁用DNS反向解析 7. …… 8. [root@localhost ~]# systemctl start sshd
用户登录控制
sshd服务默认允许root用户登录,但在internet中使用时是非常不安全的。普遍的做法如下:先以普通用户远程登录,进入安全 shell安全环境后,根据实际需要使用su命令切换为root用户。
关于sshd服务的用户登录控制,通常应禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重试次数,若超过限制后仍未登录则断开连接。
1. [root@localhost ~]# vim /etc/ssh/sshd_config 2. LoginGraceTime 2m //登录验证时间为2分钟 3. StrictModes no //禁止root用户登录 4. MaxAuthTries 6 //最大重试次数为6 5. …… 6. PermitEmptyPasswords no //禁止空密码用户登录 7. …… 8. [root@localhost ~]# systemctl restart sshd
当希望只允许或禁止某系用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(注意不要同时使用)。例如,若只允许jerry、tsengyia和admin用户登录,且其中admin用户仅能够从IP地址为192.168.1.20的主机远程登录,则可以在/etc/ssh/sshd_config配置文件中添加以下配置。
1. [root@localhost ~]# vim /etc/ssh/sshd_config 2. ……//省略部分 3. AllowUsers jerry tsengyia admin@192.168.1.20 //多个用户用空格分隔
登录验证方式
对于服务器的远程管理,除了用户账号的安全控制以外,登录验证的方式也非常重要。sshd服务支持两种验证方式——密码验证、密钥对验证,可以设置只使用其中一种方式,也可以两种方式都启用。
密码验证:对服务器中本地系统用户的登录名称,密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器优肯被假冒;重复服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
密钥对验证:要求提供相匹配的秘钥信息才能通过验证。通常先在客户端中创建一对秘钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增加了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在shell中被广泛使用。
当密码验证,密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可以启用。
1. [root@localhost ~]# vim /etc/ssh/sshd_config 2. PasswordAuthentication yes //启用密码验证 3. PubkeyAuthentication yes //启用密钥对验证 4. AuthorizedKeysFile .ssh/authorized_keys //指定公钥库文件 5. ……//省略部分文件 6. [root@localhost ~]# systemctl restart sshd
其中,公钥库文件用来保存多个客户端上传的公钥文本,以便与客户端本地的私钥文件进行匹配。
使用SSH客户端程序
在CentOS7系统中,openssh服务器由openssh、openssh-server等软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。实际上,任何支持SSH协议的客户端层序都可以与OpenSSH服务器进行通信,如Windows平台的Xshell、SecureCRT、putty等图形工具。
命令程序ssh、scp、sftp
ssh远程登录
通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户,目标主机地址作为参数。例如,若要登录主机192.168.1.10,以对方服务器的tsengyia用户进行验证,可以执行以下操作。
1. [root@localhost ~]# ssh tsengyia@192.168.1.10 2. The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established. 3. ECDSA key fingerprint is d3:34:18:89:73:c8:d3:47:e4:7d:36:c7:a3:62:17:b6. 4. Are you sure you want to continue connecting (yes/no)? yes //输入yes接受秘钥 5. Warning: Permanently added '192.168.1.10' (ECDSA) to the list of known hosts. 6. tsengyia@192.168.1.10's password: //输入密码 7. [tsengyia@localhost ~]$ //登录成功
当用户第一次登录SSH服务器时,必须接受服务器发来的ECDSA秘钥(根据提示输入“yes”)后才能继续验证。接收的秘钥信息将保存到 ~/ .ssh/known_host文件中。密码验证成功以后,即可登录目标服务器的命令行环境中了,就好像把客户端的显示器,键盘连接到服务器一样。
1. [tsengyia@localhost ~]$ whoami //确认当前用户 2. tsengyia 3. [tsengyia@localhost ~]$ /sbin/ifconfig ens33 | grep "inet" 4. inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255 //当前主机地址
如果ssh服务器使用了非默认的端口号(如2345),则在登录时必须通过“-p”选项指定端口号。例如,执行以下操作将访问主机192.168.1.10的2345端口,以对方服务器的jerry用户验证登录。
1. [tsengyia@localhost ~]$ ssh -p 2345 jerry@192.168.1.10 2. The authenticity of host '[192.168.1.10]:2345 ([192.168.1.10]:2345)' can't be established. 3. ECDSA key fingerprint is d3:34:18:89:73:c8:d3:47:e4:7d:36:c7:a3:62:17:b6. 4. Are you sure you want to continue connecting (yes/no)? yes //输入yes接受秘钥 5. Warning: Permanently added '[192.168.1.10]:2345' (ECDSA) to the list of known hosts. 6. jerry@192.168.1.10's password: //输入密码 7. [jerry@localhost ~]$ //登录成功
scp远程复制
通过scp命令可以利用ssh安全连接与远程主机相互复制文件。使用scp命令时,处理必须指定复制源,目标之外,还应指定目标主机地址,操作用户,执行后根据提示输入验证口令即可。例如,以下操作分别演示了下行,上行复制的操作过程,将远程主机中的/etc/passwd 文件复制到本机,将本机的/etc/vsftpd目录复制到远程主机。
1. 下载:scp -P 端口号 用户名@服务器IP地址:/路径/文件名 /本地路径 2. [root@localhost ~]# scp -P 2345 jerry@192.168.1.10:/etc/passwd /root/pwd.txt 3. jerry@192.168.1.10's password: //输入用户密码 4. passwd 100% 2361 2.3KB/s 00:00 5. 上传:scp -P 端口号 /本地目录/文件名 用户名@服务器IP地址:/路径 6. [root@localhost ~]# scp -P 2345 /tmp/B.txt jerry@192.168.1.10:/tmp/ 7. jerry@192.168.1.10's password: 8. B.txt 100% 0 0.0KB/s 00:00
ftp安全FTP
通过sftp命令可以利用SSH安全连接与远程主机上传,下载文件,采用了与FTP类似的登录过程和交互式环境,便于目录资源管理。例如,以下操作演示了sftp登录、浏览、文件上传、等过程。
1. [root@localhost ~]# sftp -P 2345 tsengyia@192.168.1.10 2. tsengyia@192.168.1.10's password: //输入密码 3. Connected to 192.168.1.10. 4. sftp> ls 5. sftp> put /boot/config-3.10.0-514.el7.x86_64 //上传文件 6. Uploading /boot/config-3.10.0-514.el7.x86_64 to /home/tsengyia/config-3.10.0-514.el7.x86_64 7. /boot/config-3.10.0-514.el7.x86_64 100% 134KB 134.5KB/s 00:00 8. sftp> ls 9. config-3.10.0-514.el7.x86_64 //退出登录 10. sftp> bye 11. [root@localhost ~]#
图形工具Xshell
图形工具Xshell是windows下一款功能非常强大的安全终端模拟软件,支持Telnet、SSH、SFTP等协议,可以方便地对Linux主机进行远程管理。
安装运行Xshell后,在新建会话窗口中指定远程主机的IP地址、端口号等相关信息,然后单击“连接”按钮,根据提示接受秘钥、验证密码后即可成功登录目标主机。