一、系统中的ssh与sshd服务
1.概念简介
openssh
在主机中开启了openssh服务,那么就对外开放了远程连接的接口
openssh的服务端:sshd
openssh的客户端:ssh
2.其服务器端的配置文件为/etc/ssh/sshd_config
#Port 22 #默认端口号TCP 22
#ListenAddress 0.0.0.0 #监听IP地址,默认0.0.0.0监听所有
Protocol 2 #使用ssh协议第二版
#LoginGraceTime 2m #等待登录时长2分钟
#PermitRootLogin yes #默认允许root登录
#MaxAuthTries 6 #最大允许认证次数
#MaxSessions 10 #每个网络允许打开会话的最大数量
#PubkeyAuthentication yes #启用密钥对验证
#AuthorizedKeysFile .ssh/authorized_keys #指定公钥库位置
#PermitEmptyPasswords no #不允许空密码用户登录
PasswordAuthentication yes #启用密码验证
AllowUsers zhangsan@192.168.1.51 允许用户张三登录并限制了ip地址
DenyUsers lisi #禁止用户lisi登录
注意:AllowUsers不要与DenyUsers同时使用
CheckHostIP yes #设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”
(1)为了安全禁止Root用户登录的话,在配置文件里进行一下修改,把PetmintRootLogin改成yes,并去掉#号。
(2)第一行不允许空密码用户登录,第二行是启动密码的认证
..
scp user@host:file1 file2 下载文件
scp file1 user@host: file2 上传文件
例子:
scp /abc.txt lile@192.168.8.13: / 上传文件
scp lile@192.168.8.13: ~/cde.txt / 下载文件
秘钥登录的原理:
一、serverA 免密登录 serverB 原理
首先在 serverA 上生成一对秘钥(ssh-keygen)
将公钥拷贝到 serverB,重命名 authorized_keys
serverA 向 serverB 发送一个连接请求,信息包括用户名、ip
serverB 接到请求,会从 authorized_keys 中查找,是否有相同的用户名、ip,如果有 serverB 会随机生成一个字符串
然后使用使用公钥进行加密,再发送个 serverA
serverA 接到 serverB 发来的信息后,会使用私钥进行解密,然后将解密后的字符串发送给 serverB
serverB 接到 serverA 发来的信息后,会给先前生成的字符串进行比对,如果一直,则允许免密登录
3.实现秘钥登录
(1)ssh-keygen -t rsa #生成秘钥对,rsa是加密算法,如下图
在/etc/hosts/加入以下内容
192.168.8.110 slave1
(2)查看公钥和秘钥
rsa.pub是公钥
(3)上传客户端的公钥id_rsa.pub给服务器
方法一:
scp /root/.ssh/id_rsa.pub root@192.168.8.12: /root
3.服务器端导入公钥信息到特定的文件:/root/.ssh/authorized_keys 我在实验中使用root用户,如果是其他用户,就换成对应用户的家目录下的.ssh/authorized_keys
服务器端:/root/目录下可能没有.ssh目录,可以自己创建 mkdir .ssh 我实验中是存在的,而且.ssh目录下的authorized_keys文件也存在,只不过里面是空的。
把/root/下的id_rsa.pub 附加重定向到authorized_keys文件中
cat id_rsa.pub >> .ssh/authorized_keys
修改目录和文件的属性:
chmod 700 .ssh
chmod 600 authorized_keys
方法二:
ssh-copy-id -i /root/.ssh/id_rsa.pub lile@192.168.10.103 -p 22
注意上方的配置只是让lile用户免密登录,并不是让所有用户
(4)修改配置文件启动密钥验证
# vim /etc/ssh/sshd_config
PasswordAuthentication no //yes改为no
ChallengeResponseAuthentication no //yes改为no
RSAAuthentication yes //去掉前面的注释
PubkeyAuthentication yes //去掉前面的注释
AuthorizedKeysFile .ssh/authorized_keys //去掉前面的注释
PermitEmptyPasswords no //去掉前面的注释,将no 改成yes
(5)验证免密登录是否成功
限制ip访问sshd服务:修改/etc/hosts.deny文件
不能限制http访问,需要在防火墙设置