一、ssh概述
ssh是Secure Shell的缩写,是一个建立在应用层上的安全远程管理协议。
SSH是目前较为可靠的传输协议,转为远程登录会话和其他网络服务提供安全性。里用ssh协议可以有效防止远程管理过程中的信息泄露问题。
SSH可用于大多unix和类unix操作系统中,能够实现字符界面的远程登录管理,默认试用22端口,采用密文形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。
二、SSH的登录验证模式
SSH提供了基于账户密码(口令)和密钥两种登录验证方式,这两者都是通过密文传输数据的。
格式:
ssh 用户名@IP地址
ssh root@192.168.1.130
windows远程登录Linux主机一般试用第三方工具,比如xshell等。
在xshell中,也可以直接ssh ip进行登录。
在Linux中,也可以直接ssh ip进行其他Linux的远程管理。exit可以退出。
三、密钥对验证模式
1.密钥对验证前提
客户机已经把自己的公钥放在了服务器上。
2.密钥对验证流程
(1).客户机拿着自己的公钥,去请求连接服务器,服务器要求客户机接受自己的公钥文件
(2).服务器接受客户端的公钥,验证本地存放的公钥内容和接收到的是否一致
(3).若不一致,则直接拒绝登录请求;若一致,则试用客户端的公钥加密一串“质疑”信息,发送给客户端
(4).客户端收到加密内容后,使用客户端私钥进行解密,解密后,再使用服务器公钥将结果加密,然后传给服务器。
(5).服务器接受客户端发送的数据包,使用服务器私钥进行解密,若结果和当时发给客户机的“质疑”内容一样。则成功简历了安全的远程连接。
四、配置SSH服务
1. 环境准备
两台Linux系统主机,相互可以通信。
临时关闭防护功能
iptables -F 清空防火墙规则
sentenforce 0 临时关闭SELinux
永久关闭防护功能
chkconfig iptables off
systemctl disable iptables (firewalld)
iptables -L
查看防火墙规则,可以清空iptables前后看
getenforce
查看SELinux是否生效,Enforcing表示生效
设置Setnforce 0后,Permissive,警告,不生效。
systemctl status iptables
或service iptables status
查看iptables服务和生效否
2.用户密码验证:
ssh root@192.168.1.130
可以不写用户名,默认root。exit退出
3.密钥对验证
Linux主机之间的密码对登录验证
客户端生成密钥对登录验证
ssh -keygen 0t rsa -b 2048
-t,指定加密类型(rsa/dsa等)
-b,指定密钥对加密长度
默认生成位置会在当前家目录下的.ssh/目录下将公钥文件上传至服务器端
ssh -copy -id 用户名@服务器IP地址
客户端登录服务器
ssh 用户名@服务器IP地址
注:
rsa加密类型1024以内曾被暴力破解过,所以加密长度要多余1024位。
密钥对登录的优先级高于账户密码优先级。
4.windows使用密钥对登录Linux(xshell)
(1).使用xshell自带的密钥对生成向导,生成密钥对。
点击工具栏,选择用户密钥生成向导
点击生成,选择rsa密钥类型,因为rsa加密类型比较常用,长度不小于1024,常用2048。点击下一步
自动生成密钥对,点击下一步
输入密钥名称,是否对密钥本身进行加密,不加密就不输入,建议是输入密码最好。然后下一步。
这里点击下一步会显示公钥内容,进行复制,不建议保存位文本,因为windows和Linux的符号,空格,回车这些是有区别的。
粘贴至需要登录的服务器下客户端公钥所在位置,默认在家目录下.ssh/authorized_keys中,如果其中有一台的客户端公钥,直接空行加上即可。
注意:
sshd为了安全,对属主的目录和文件权限有所要求。如果权限不对,则ssh的免密码登陆不生效。
用户目录权限为755 或者 700,就是不能是77x。
.ssh目录权限一般为755或者700。
rsa_id.pub 及authorized_keys权限一般为644
rsa_id权限必须为600
(2).登录
ssh root@IP
登陆后选择public-key,密钥登录即可。
5.禁止使用密码登录。
一般情况下,当使用密钥登录后,就将账号密码登录功能关掉最好。
配置文件
/etc/ssh/sshd_config
将注释取消,yes改为no
改完重启ssh服务
systemctl restart sshd
6.禁止使用root远程登录
配置文件:
/etc/ssh/ssh_config
将注释取消,yes改为no
重启sshd服务
systemctl restart sshd
7.修改ssh服务默认端口、限制ssh监听IP
(1).修改默认端口
vim /etc/ssh/sshd_config
Port 22 —>59527
port一般是注释的,解除就行。重启sshd服务。
连接的时候ssh xxx@xxx.xxx.xxx.xxx 59527就行
nmap这时候都扫描不到59527了
因为nmap只扫描常用端口
(2).限制ssh监听IP
有些服务器安全级别很高,不允许使用外网直接登录,只有通过局域网才能登录,可以在机房中设置其中一台服务器能够被往外连接,其他的主机都通过这个及其进行远程连接即可。
配置文件:
/etc/ssh/sshd_config
ListenAddress xxx.xxx.xxx.xxx
默认是0.0.0.0,所有IP监听。
重启sshd服务即可,此IP就无法登录了。
8.ssh其他相关命令
scp
安全的远程文件复制命令
Linux下进行远程拷贝文件命令,类是cp,只是scp是加密的,所以会稍微影响速度,但scp不占资源,不会提高多少系统负载scp /root/mysql.dmp root@192.168.1.5:/tmp
-p可以加端口scp 本地文件 用户名@服务器IP:目录
scp 用户名@服务器IP:目录 本地文件
也可以从其他服务器复制过来
需要输入对方服务器密码
如果中途有报错
这类ECDSA主机密钥已更改问题,但是又没设置密钥,可以直接在本地主机上,家目录的.ssh目录下找到known_hosts文件,将其中的密钥内容删除即可。
sftp
安全的文件传输协议
和ftp有着几乎一样的功能,但使用了加密/解密技术,所以比ftp更安全。但传输效率也低得多。sftp 用户名@服务器IP
会要求输入服务器IP的密码
然后进入sftp交互界面
help,可以查看所有交互命令
pwd,连接服务器的路径
lpwd,自己本机当前所在路径
cd,切换连接端目录
lcd,切换本机端目录
lls,查看本极端目录
ls,查看连接端目录
put,将本机端中的指定文件上传至连接端,例:put /root/123.txt /tmp
rm,删除掉连接端的指定文件
quit,退出交互模式sftp -oport=53527 root@xxx.xxx.xxx.xxx
可以指定端口