OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet
(终端仿真协议)、 rcp
、 ftp
、 rlogin
、rsh
都是极为不安全的,并且会使用明文传送密码。
OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
- 客户端组件的使用:
-
ssh :配置文件 :
/etc/ssh/ssh_config
ssh 格式:
ssh [user]@hostID [COMMAND]
ssh [ -l user host ] host [COMMAND]
-p
:port,远程服务器监听的端口
-X
:支持x11转发(图形界面)
-Y
:支持信任的x11zhuanfa
- 服务器端:
-
sshd:配置文件:
/etc/ssh/sshd_config
常修改选项:
(1)port
:例如修改为:22022
(2)ListenAddress:ip
(3)PermitRootLogin:yes
(4)UseDNS no
(5)限制可登入用户
基于密钥的认证:
1、(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ''] [-f "~/.ssh/id_rsa"]
这个命令会默认在当前用户的隐藏目录
-p
:指定密码
-f
:指定生成密钥放在哪个目录下
.ssh
目录下生产一对密钥(公钥、私钥),一会儿我们需要把公钥发送到远程服务器上。
现在我们来查看一下是否生成了密匙对:
(2) 把公钥文件传输至远程服务器对应用户的家目录
格式:
ssh-copy-id [-i [identity_file]] [user@]machine
-i
:指定要传哪个公钥文件
user
:远程主机你要以什么身份运行,而不是本地主机的身份
(3) 测试:
总结:基于密钥的登入不需要密码,很方便。上面的远程登入是linux登录linux,
2、另外我们使用windows客户端(xshell、securecrt)也可以实现,下面我们以xshell为例来进行说明:
(1)首先找到xshell菜单栏里的工具
---->新建用户密匙生成向导
(2)密匙类型我们一般选择
RSA
,而密匙长度可以任意选择Alt text
(3)这一步就会生成共钥对(私钥和公钥)
(4)密匙名称一般默认,至于需不需要给用户密匙加密码由你自己决定
(5)生成的公式一会儿需要在服务器上注册,在这里我选着复制一会儿直接粘贴到远程主机相对应的文件夹里
Alt text
(6)接下来在远程主机上编辑对应家目录下的文件:不过在此之前我们还需要检查一下是否(这里我们以远程主机上的root用户为例)
root
家目录下的.ssh
是否已经存在authorized_keys
,如果没有此文件,需要我们手工创建
(7)编辑此文件,把刚刚我们copy的公钥粘贴到上面
Alt text
然后保存退出
(8)接下来就是我们的测试阶段,现在我们在客户端链接远程主机:
下面这张图就表示我们已经连接到远程主机上了,接下来的事情就看你发挥了
接下来我们把其中我们用到的scp命令介绍简单一下:
scp:
跨主机的复制命令
格式:scp [options] SRC… DEST/
两种方式:
1、把别的主机的文件复制到本地 :
scp [options] [user@]host : /PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE
注意:user是远程主机的用户
例如:把别的主机的fstab文件复制到本地的app目录下
scp root@192.168.220.164:/etc/fstab /app/
2、把本地主机的文件复制到别的主机上
scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE
例子:把本地的fstab文件复制到app目录下
scp /etc/fstab root@192.168.220.164:/app/
常用选项:
-C
:压缩数据流
-r
:递归复制
-p
:保持原文件的属性信息
-q
:静默模式
-P
: PORT,指明远程主机(remote host)的监听的端口
ssh服务的最佳实践
服务器端:配置文件 /etc/ssh/sshd_config
** 方法: **
1、不要使用默认端口:
把配置文件的端口改用其它的端口号。一般修改端口之后必须重启服务,比如把上面配置文件修改端口为
22022
,(centos7)用命令:systemctl restart sshd.service
,接下来就可以用命令ss -ntl
查看一下端口情况,此时需要注意Selinux关掉没有(getenforce
查看一下Selinux
的状态,如果是Enforcing
状态,那么就用命令setenforce 0
关掉)用命systemctl status sshd.service
可以查看服务的状态。
2、进制使用protocol version 1
编辑配置文件注释即可
3、限制可登入用户
限制可登入用户的办法:
1、白名单:
(1)AllowUsers user1 user2 user3...
(2)AllowGroups group1 group2 group3...
2、黑名单:
(1)DenyUsers
(2)DenyGroups
** 下面我来举个例子怎样限制用户的登入 **
第一步:首先编辑文件/etc/ssh/sshd_config
用命令vim /etc/ssh/sshd_config
第二步:重置一下这个服务:systemctl reload sshd.service
第三步:我们用另外一个主机来连接这台主机(由于xiaoming没在白名单内会拒绝xiaoming登入)
现在我们再来用xiaohong登入(xiaohong在白名单里面,因此可以登入)
另外连接这台主机的其它主机都会记录在/var/log/secure
Alt text
4、设定空闲会话超时时长
5、利用防火墙设置ssh访问策略
**6、仅监听特定的IP地址 **
7、基于口令认证时,使用强密码策略
可以使用随机数生成密码:
tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
**8、尽可能使用基于密钥的认证 **
**9、禁止使用空密码 **
**10、进制root用户直接登入 **
**11、限制ssh的访问频度和并发在线数 **
12、做好日志,经常分析
网友评论