SSH是一种安全通道协议,是用来实现字符界面的远程登陆,远程复制等功能的,我们日常生活可以使用该功能来进行远程操控,省去了很多麻烦。
SSH协议对通信双方的数据进行了加密处理,其中包括用户登陆时输入的用户口令。因此SSH协议具有很好的安全性。
我们正在使用的centos7系统已经默认安装openssh相关的软件包,并且已经将sshd服务添加为开机自启。
执行“systemctl start sshd”命令即可启动sshd服务
sshd服务默认使用的是TCP的22端口
sshd服务的默认配置文件为/etc/ssh/sshd_config
注:ssh_config和sshd_config都是ssh服务器的配置文件前者是
针对客户端的配置文件,后者则是针对服务器的配置文件
下面是sshd_config的重要配置
Port 22 #监听端口22
ListenAddress 0.0.0.0 #监听地址为任意网段,也可以指定OpenSSH服务器的具体IP
LoginGraceTime 2m #登陆验证时间为2分钟
PermitRootLogin no #禁止root用户登录
MaxAuthTries 6 #最大重试次数为6
PermitEmptyPasswords no #禁止空密码用户登录
UseDNS no #禁止DNS反向解析,以提高服务器的响应速度
示例
#只允许zhaohua,muzi,用户登录,且其中muzi用户仅能够从ip地址为192.168.199.30的主机远程登陆
AllowUsers zhaohua [email protected] #多个用户以空格分离
#禁止某些用户登录,用法和Allowusers类似(不要同时使用)
Denyusers zhaohua
最基本的对服务器中本地系统用户的登录名称,密码进行验证。非常简单,但容易被破解。所以我们不推荐如此使用。
要求提供相匹配的密钥信息才能通过验证。通过先在客户端中创建一对密钥文件(公钥,私钥),然后将公钥文件放到服务器中的之的指定位置。远程登陆时,系统将公钥,私钥进行加密,解密关联验证。能增强安全性,并且还可以免交互登录。
当我们密码验证和密钥对验证都开启时,优先使用密钥对验证。当然,我们也可以根据实际情况来进行设置验证方式。
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys #指定公钥库文件
1,ssh远程登陆
当用户第一次登陆SSH服务器时,必须接受服务器发来的的ECDSA密钥(根据提示输入“yes”)然后再输入密码,验证成功就可以登录了。
命令
ssh 用户@IP地址
例: ssh [email protected]
-p :指定非默认的端口号,缺省时默认使用22端口
scp [email protected]:/etc/locale.conf /root/sshfuzhi.txt
scp -r [email protected]:/etc/lvm /root/sshfuzhi.txt #复制目录时需加-r,表示递归复制
scp -r /etc/ssh/ [email protected]:/opt
因为ssh使用了加密和解密技术,所以安全性比普通的FTP要高,但是传输速率要更低。
命令
sftp [email protected] #登录到[email protected]
sftp> get [-r] 文件或目录 文件保存位置(可缺省,缺省时代表复制到当前目录) #当要传输目录时,需要加入-r代表递归复制 ,将远程主机的文件下载到我们的主机上
sftp>put [-r] #将我们本机的文件,上传到远程主机上
首先,我们先要登录到远程主机上面;
登陆后,我们可以利用ls查看对方的目录,或者直接进行传输,将对方的an文件传输到我们的opt目录。
或者使用put指令,将我们主机上面的文件传输到对方主机
上传之后我们可以进行查询,看看是否传输成功。
或者我们可以指定接收目录,将我们的文件传输到该目录
可以先建立一个admin用户
useradd admin
echo "123123" | passwd --stdin admin
su -admin
然后再进行创建密钥对
ssh-keygen -t ecdsa
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: #确认输入
在配置完密钥对之后,我们可以进行查看密钥对来确认,密钥对存放于.ssh中,通过以下命令可以进行查看
ls -l ~/.ssh/id_ecdsa*
-rw------- 1 admin admin 314 12月 9 15:10 /home/admin/.ssh/id_ecdsa
-rw-r--r-- 1 admin admin 189 12月 9 15:10 /home/admin/.ssh/id_ecdsa.pub
cat authorized_keys #这时已经在.ssh/目录下了,所以使用相对路径
后面我们就应该将公钥导入服务器中,让服务器与客户端进行配对
ssh-copy-id -i id_ecdsa.pub [email protected] #可以直接在服务器的/home/zhao/.ssh/目录中导入公钥文本
ssh [email protected] #使用密钥对验证
Enter passphrase for key '/home/admin/.ssh/id_ecdsa': #输入私钥的密码
<服务程序列表>:<客户端地址列表>
ALL:代表所有的服务。
单个服务程序:如“vsftpd"。
多个服务程序组成的列表:如"vsftpd,sshd"。
ALL:代表任何客户端地址。
LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符“*”和“?”,前者代表任意长度字符,后者仅代表一个字符
网段地址,如“192.168.199.”或者192.168.199.0/255.255.255.0
区域地址,如".benet.com”匹配benet.com域中的所有主机。
基本策略
常用情况
比如我们在192.168.199.0网段中,我们只想让192.168.199.20访问192.168.199.30,需要做如下设置
然后再在/etc/ hosts.deny中不允许所有网段通过
之后我们就发现10IP已经无法进入了,但20IP还是可以进入。