SSH远程访问及控制——远程登录服务器并传输数据⼀、SSH远程管理
1、SSH的概述
SSH是⼀种安全通道协议,主要⽤来实现字符界⾯的远程登录、远程复制等功能;
对通信双⽅的数据传输进⾏加密处理,其中包括⽤户登录时输⼊的⽤户⼝令;
与早期的Telnet(远程登录)、rsh(远程执⾏命令)、rcp(远程⽂件控制)等相⽐,SSH协议提供了更好的安全性
• SSH客户端: Putty、 Xshell、 CRT
• SSH服务端: OpenSSH
✔ OpenSSH 是实现SSH 协议的开源软件项⽬,适⽤于各种UNIX、Linux 操作系统
✔ Centos 7系统默认已安装openssh相关软件包,并已将sshd 服务添加为开机⾃启动
✔执⾏“systemctl start sshd" 命令即可启动sshd 服务
✔ sshd服务默认使⽤的是TCP的22端⼝
✔ sshd服务的默认配置⽂件是/etc/ssh/sshd_config
ssh_config和sshd_config都是ssh服务器的配置⽂件,⼆者区别在于前者是针对客户端的配置⽂件,后者则是针对服务端的配置⽂件
⼆、OpenSSH服务器
1、 SSH (Secure Shell)协议
• 是⼀种安全通道协议
• 对通信数据进⾏了加密处理,⽤于远程管理
2、OpenSSH
• 服务名称: sshd
• 服务端主程序: /usr/sbin/sshd
• 服务端配置⽂件: /etc/ssh/sshd_ config
三、配置OpenSSH服务器
1、sshd_ config配置⽂件的常⽤选项设置
vim /etc/ssh/sshd_config            #服务端配置⽂件
#Port 22      #监端⼝为22
#AddressFamily any    #监听地址为任意⽹卡,也可以指定Openssh服务器的具体ip
#LoginGraceTime 2m    #登录验证时间为2分钟
#PermitRootLogin yes            #禁⽌root⽤户登录
#MaxAuthTries 6      #最⼤重试次数为 6
#PermitEmptyPasswords no          #禁⽌空密码⽤户登录
#UseDNS no            #禁⽤DNS反向解析,以提⾼服务器的响应速度
----------------------------------------------------------------------------------
配置允许和禁⽌⽤户登录:加@表⽰限制ip,注意允许和禁⽌不要同时使⽤!!
AllowUsers zhangsan    #允许zhangsan登录(多个⽤户以空格间隔)
AllowUsers zhangsan@192.168.80.80                #只允许zhangsan通过192.168.80.80登录
DenyUsers lisi      #禁⽌lisi登录
2、实例操作:配置⽂件的常⽤选项
2.1 更改端⼝号(默认是22),指定端⼝登录
2.2 设置不允许root⽤户登录
2.3 设置只允许lili、lulu⽤户登录,且其中lili⽤户仅能够从192.168.229.10的主机远程登录
2、.sshd服务⽀持登录验证⽅式有:密码验证和密钥对验证,可以设置只使⽤其中⼀种,也可以都启⽤
2.1 密码验证:
以服务器中本地系统⽤户的登录名称、密码进⾏验证。
这种⽅式使⽤最为简便,但从客户机⾓度来看,正在连接的服务器有可能被假冒,从服务器⾓度来看,当遭遇密码暴⼒破解攻击时防御能⼒⽐较弱。
2.2 密钥对验证:
要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建⼀对密钥⽂件(公钥和私钥),然后将公钥⽂件放到服务器中的指定位置。
远程登录时,系统将使⽤公钥、私钥进⾏加密/解密关联验证,增强了远程管理的安全性。
公钥和私钥是成对⽣成的,这两个密钥互不相同,可以互相加密和解密;
不能根据⼀个密码来推算出另⼀个密钥;
公钥对外公开,私钥只有私钥的持有⼈才知道。
公钥和私钥要配对使⽤,如果⽤公钥对数据进⾏加密,只有⽤相对应的私钥才能解密;如果⽤私钥对数据进⾏加密,那么只有对应的公钥才能解密。
当密码验证、密钥对验证都启⽤时,服务器将优先使⽤密钥对验证。
对于安全性要求较⾼的服务器,建议将密码验证⽅式禁⽤,只允许启⽤密钥对验证⽅式;若没有特殊要求,则两种⽅式都可以。
可根据实际情况设置验证⽅式:
vim /etc/ssh/sshd_config
PasswordAuthentication yes                        #启⽤密码验证
PubkeyAuthentication yes                          #启⽤密钥对验证
AuthorizedKeysFile  .ssh/ authorized_keys        #指定公钥库⽂件.
四、使⽤SSH客户端程序
1、ssh 远程登录
ssh [选项]  lili@192.168.229.10
当⽤户第⼀次登录SSH服务器时,必须接受服务器发来的ECDSA密钥(根据提⽰输⼊"yes")后才能继续验证。
接收的密钥信息将保存到~/.ssh/known_hosts⽂件中。密码验证成功以后,即可登录⽬标服务器的命令⾏环境中了
ssh [选项] zhangsan@192.168.229.10 #指定登录⽤户、⽬标主机地址作为参数
ssh -p 20 zhangsan@192.168.229.10 #-p为指定端⼝
2、 scp远程复制
复制多个⽂件时,中间⽤空格间隔
如果对⽅有相同的⽂件名,则会覆盖原⽂件
2.1 下⾏复制
scp root@192.168.229.20:/etc/passwd /root/passwd10. txt
#将远程主机中的/etc/passwd⽂件复制到本机
2.2 上⾏复制
scp -r /etc/ssh/root@192.168.229.30:/opt    #复制⽬录时要加-r
#将本机的/etc/ssh⽬录复制到远程主机
3、sftp 安全FTP
由于使⽤了加密/解密技术,所以传输效率⽐普通的FTP要低,但安全性更⾼。操作语法sftp与ftp⼏乎⼀样
sftp root@192.168.229.30
Connecting to 192.168.
tsengyia@172.16.16.22's password:
#输⼊密码
sftp> ls
sftp> get⽂件名
#下载⽂件到ftp⽬录
sftp> put⽂件名.
#_上传⽂件到ftp⽬录
sftp> quit
#退出.
4、实例操作
4.1 scp远程复制
4.1.1 下⾏复制
4.1.2 上⾏复制
4.2 sftp
五、配置密钥对验证
1.在客户端创建密钥对
通过ssh-keygen⼯具为当前⽤户创建密钥对⽂件。可⽤的加密算法为RSA、ECDSA或DSA等 ( ssh- keygen命令的“-t”选项⽤于指定算法类型
⾸先创建账户:admin
useradd admin        #创建新⽤户
echo "123456" | passwd --stdin admin                          #设置密码
su admin        #切换到admin⽤户
ssh-keygen -t ecdsa        #使⽤ssh-keygen进⾏加密
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa):  #指定私钥位置,回车选择默认
Created directory '/home/admin/.ssh'.            #告诉我们⽣成的密钥对存放在⽬录中的隐藏⽬录.ssh、下
Enter passphrase (empty for no passphrase):                    #设置私钥的密码
Enter same passphrase again:        #再次确认
ls -l ~/.ssh/id_ecdsa*              #可以查看到⽣成的密钥对⽂件
/home/admin/.ssh/id_ecdsa              #这是私钥⽂件,权限默认为600
/
home/admin/.ssh/id_ecdsa.pub                    #这是公钥⽂件,⽤来提供给SSH服务器 
2.将公钥⽂件.上传⾄服务器
scp ~/.ssh/id_ecdsa.pub root@192.168.80.80:/opt  #将⾃⼰的公钥⽂件上传到服务器的opt⽬录下
cd ~/.ssh                    #切换到密钥对所在⽬录,此⽅法在服务端创建好zhangsan⽤户,使⽤此⽅法直接跳过第三步
ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.229.10  #这个⽅法可以直接在服务的/home/zhangsan/,ssh/⽬录中导⼊公钥⽂本 
3.在服务器中导⼊公钥⽂本
useradd zhangsan          #添加新⽤户zhangsan
echo "123456" | passwd -- stdin zhangsan                            #设置密码
mkdir /home/zhangsan/.ssh/                #创建zhangsan的.ssh⽬录
cat /opt/id_ecdsa.pub >> /home/zhangsan/.ssh/authorized_keys                                #将从客户端接受的公钥导⼊到zhangsan的公钥库中
cat /home/zhangsan/.ssh/authorized_keys                            #使⽤cat命令进⾏查看确定 
4.在客户端使⽤密钥对验证、在客户机设置ssh代理功能,实现免交互登录ssh zhangsan@192.168.229.20        #使⽤密钥进⾏远程连接验证
Enter passphrase for key '/home/admin/.ssh/id_ecdsa':                                  #输⼊私钥的密码进⾏验证
exit          #退出服务器端
ssh-agent bash          #对客户机设置ssh代理功能,实现⾯交互登录
ssh-add
Enter passphrase for /home/admin/.ssh/id_ecdsa:                          #输⼊私钥进⾏确定
ssh zhangsan@192.168.80.80        #再次远程连接服务器的时候⽆需输⼊密码 
6、实例操作:配置密钥对验证
6.1  ⽅法⼀:将公钥上传⾄服务器,并在服务器导⼊公钥⽂本
6.1.1.在客户端创建密钥对:
6.1.2.将公钥⽂件上传⾄服务器
6.1.3.在服务器中导⼊公钥⽂本
6.1.4.在客户端使⽤密钥对验证
6.2 ⽅法⼆:将公钥直接导⼊到服务器中
6.2.1 在客户端创建密钥对:
6.2.2  将公钥直接导⼊到服务器中
6.2.3.在客户端使⽤密钥对验证
6.2.4.在客户机设置ssh代理功能,实现免交互登录
六、TCP Wrappers访问控制
1、TCP Wrappers (TCP封套 )
• 将TCP服务程序“包裹”起来,代为监听TCp服务程序的端⼝,增加了⼀个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序
• ⼤多数Linux 发⾏版,TCP Wrappers 是默认提供的功能。rpm -q tcp_wrappers
2、TCP Wrappers 保护机制
两种实现⽅式:
直接使⽤tepd程序对其他服务程序进⾏保护,需要运⾏tcpd程序
由其他⽹络服务程序调⽤libwrap.so. *链接库,不需要运⾏tcpd 程序。此⽅式的应⽤更加⼴泛,也更有效率
使⽤ldd命令可以查看程序的libwrap.so. *链接库
ldd $ (which ssh)
3、TCP Wrappers的访问策略:
• TCPWrappers机制的保护对象为各种⽹络服务程序,针对访问服务的客户端地址进⾏访问控制
• 对应的两个策略⽂件为/etc/hosts.allow和/etc/hosts .deny,分别⽤来设置允许和拒绝的策略
4、格式:
<;服务程序列表>:<;客户端地址列表>
4.1 服务程序列表
• ALL:代表所有的服务
• 单个服务程序:如“vsftpd"
• 多个服务程序组成的列表:如“vsftpd, sshd”
4.2  客户端地址列表
• ALL:代表任何客户端地址
• LOCAL:代表本机地址
多个地址以逗号分隔:
允许使⽤通配符“*" 和“?" ,前者代表任意长度字符,后者仅代表⼀个字符
⽹段地址:如“192. 168.80.”或者192. 168.80.0/255.255.255.0
区域地址:如". benet"匹配benet 域中的所有主机
5、TCPWrappers机制的基本原则:
• ⾸先检查/etc/hosts.allow⽂件,如果到相匹配的策略,则允许访问
• 否则继续检查/etc/hosts.deny⽂件,如果到相匹配的策略,则拒绝访问
• 如果检查上述两个⽂件都不到相匹配的策略,则允许访问
“允许所有,拒绝个别”——⿊名单
只需在/etc/hosts.deny⽂件中添加相应的拒绝策略(系统默认的就是允许所有)
“允许个别,拒绝所有”——⽩名单
除了在/etc/hosts .allow中添加允许策略之外,还需要在/etc/ hosts .deny⽂件中设置"ALL:ALL"的拒绝策略
6、实例操作
6.1 实例⼀:设置⿊名单,不允许IP地址为192.168.229.10的主机访问sshd服务,其他都可以访问
telnet远程登录配置