会哭的雨 2019-12-21
ssh 是 Secure Shell 的缩写,是一个建立在应用层上的安全远程管理协议。ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用 ssh 协议可以有效防止远程管理过程中的信息泄露问题。 ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。
ssh 提供了基于账户密码(口令)和密钥对两种登录验证方式,这两者都是通过密文传输数据的。
ssh 用户名@IP地址
准备好两台Linux操作系统的主机,且将其主机名更改为不同,便于后面的密钥对登录。
centos6 更改主机名
[ ~]# vim /etc/sysconfig/network HOSTNAME=centos-11
临时关闭防护功能:
iptables -F #清空防火墙规则 setenforce 0 #临时关闭SELinux
永久关闭防护功能:
chkconfig iptables off #设置防火墙开机不自启动 sed -i ‘7s/enforcing/disabled/’ /etc/selinux/config #永久关闭SELinux #注意:以上两条命令执行后,需要重启服务器才能生效
1、客户端生成密钥对文件 ssh-keygen -t rsa -b 2048
-t 指定加密类型(rsa/dsa等)
-b 指定密钥对加密长度
询问1:执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下
询问2:是否对密钥文件进行加密
加密:若加密,则在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件
不加密:若不加密,则密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录
[ ~]# ssh-keygen -t rsa -b 2048
2、将公钥文件上传至服务器端 ssh-copy-id 用户名@服务器IP地址
[ ~]# ssh-copy-id #该用户名和要用来登录服务器的用户名一致
3、客户端尝试登录服务器 ssh 用户名@服务器IP地址
[ ~]# ssh Last login: Fri Dec 20 20:41:00 2019 from 10.10.10.1 #密钥对验证优先级大于账户密码验证
由于Windows不能直接生成密钥对,所以需要借助工具。我使用的是xshell
1、使用Xshell自带的密钥对生成向导生成密钥对
一直下一步,其中有一步是,设置密码为本地私钥。看情况进行选择。最后一步复制公钥无需保存。
2、将公钥导入Linux主机的指定用户下的指定公钥配置文件内 后面用哪个用户登录就放在谁的用户家目录下,找到 .ssh 目录,然后在里面创建 authorized_keys 文件,并且将公钥写入。
[ ~]# vim .ssh/authorized_keys #粘贴你刚才复制的公钥信息,另起一行
3、使用windows尝试登录指定用户
root 在系统中是一个可以为所欲为的角色,我们可以在平时的操作中用普通用户操作,在有需要修改一些系统设置的时候再从普通用户切换到 root 用户,这样可以最大限度的避免因为误操作而对系统造成破坏,同时也可以避免黑客在暴力破解后直接使用 root 用户登录系统,一般在远程登录管理上我们会禁止直接使用 root 用户登录。
配置文件:/etc/ssh/sshd_config 选项: PermitRootLogin no
配置文件:/etc/ssh/sshd_config Port 55235 linux 主机登录 ssh -p 55235 xshell 登录 ssh :55235
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,类似于命令有cp,scp传输是加密的,所以可能会稍微影响一点速度。另外,scp还非常不占资源,不会提高多少系统负荷。
格式: scp 本地文件 用户名@服务器IP:目录 scp test.txt :/tmp -P 端口 #若端口不是默认22,则需要使用此格式指定端口
sftp是Secure FileTransferProtocol的缩写,安全文件传送协议。sftp与ftp有着几乎一样的语法和功能。由于这种传输方式使用了加密/解密技术,所以sftp比ftp更安全一些,但传输效率比普通的FTP要低得多.
格式: sftp 用户名@服务器IP -oPort=端口 #若端口不是默认22,则需要使用此格式指定端口 交互命令: help:查看在交互模式下支持哪些命令 pwd/lpwd:pwd是查看服务器所在路径;lpwd是查看客户端所在路径 ls/lls:ls是查看服务器当前目录下的文件列表;lls是查看客户机当前所在路径的所有文件列表 put:将客户机中的指定文件上传到服务器端 get:将服务器端的指定文件下载到客户机的当前所在目录 rm:删除掉服务器端的指定文件 quit:退出sftp的交互模式,断开和服务器之间的连接
TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实现访问控制,界定方式是凡是调用libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。
简单来说 TCP Wrappers 只对走tcp协议的一些服务起到控制作用。
判断方式:
1. 查看对应服务命令所在位置 which sshd 2. 查看指定命令执行时是否调用libwrap.so文件 ldd /usr/sbin/sshd | grep libwrap.so [ ~]# which sshd /usr/sbin/sshd [ ~]# ldd /usr/sbin/sshd | grep libwrap.so libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fd38c0d1000)
以ssh为例,每当有ssh的连接请求时,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
TCP_Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow, /etc/hosts.deny,以此实现访问控制,默认情况下,/etc/hosts.allow,/etc/hosts.deny什么都没有添加,此时没有限制 。
: client_list 配置文件编写规则: service_list: 是程序(服务)的列表,可以是多个,多个时,使用,隔开 @host:设置允许或禁止他人从自己的哪个网口进入。这一项不写,就代表全部 client_list:是访问者的地址,如果需要控制的用户较多,可以使用空格或,隔开 内置ACL:ALL(所有主机)、LOCAL(本地主机)
以ssh服务代码示例:
拒绝单个 IP 使用 ssh 远程连接: 配置文件: hosts.allow:空着 hosts.deny:sshd:10.10.10.1 拒绝某一网段使用 ssh 远程连接: hosts.allow:空着 hosts.deny:sshd:10.10.10. 仅允许某一 IP 使用 ssh 远程连接: hosts.allow:sshd:10.10.10.11 hosts.deny:sshd:ALL