生产环境ssh登陆策略

备份:cp /etc/ssh/sshd_config{,.bak}

vim /etc/ssh/sshd_config

 
  1. 17 #Port 22 #修改ssh连接端口
  2. 38 #PermitRootLogin yes #是否允许root账号远程登陆
  3. 43 #PubkeyAuthentication yes #是否开启公钥连接认证
  4. 47 AuthorizedKeysFile .ssh/authorized_keys #公钥文件的放置位置
  5. 65 PasswordAuthentication yes #是否开启密码验证登陆
  6. 79 GSSAPIAuthentication yes #是否关闭GSSAPI认证
  7. 115 #UseDNS yes #是否关闭DNS反向解析
  8. 修改后
  9. 17 Port 22221 #工作中需要设定到1万以上的端口,避免被扫描出来。
  10. 38 PermitRootLogin no #如果不是超大规模的服务器,为了方便我们可以暂时开启root远程登录
  11. 43 PubkeyAuthentication yes #开启公钥认证模式
  12. 47 AuthorizedKeysFile .ssh/authorized_keys #公钥放置位置
  13. 65 PasswordAuthentication no #为了安全我们关闭服务器的密码认证方式
  14. 79 GSSAPIAuthentication no #关闭GSSAPI认证,极大提高ssh连接速度
  15. 115 UseDNS no #关闭DNS反向解析,极大提高ssh连接速度
 

设置xshell私钥登陆Linux

 
  1. #查看服务器端IP
  2. [root@ansible .ssh]# hostname -I
  3. 192.168.200.183
  4. #在Linux服务器端生成rsa密钥对
  5. [root@ansible ~]# ssh-keygen #一直回车
  6. Generating public/private rsa key pair.
  7. Enter file in which to save the key (/root/.ssh/id_rsa):
  8. Enter passphrase (empty for no passphrase):
  9. Enter same passphrase again:
  10. Your identification has been saved in /root/.ssh/id_rsa.
  11. Your public key has been saved in /root/.ssh/id_rsa.pub.
  12. The key fingerprint is:
  13. SHA256:royhAEKx9bhe4jLZ3SzfZ/yvhkzPgToDIx+1gSxoOLM root@www
  14. The keys randomart image is:
  15. +---[RSA 2048]----+
  16. | . . |
  17. | + o |
  18. | o..... . |
  19. |.+ o.. o o |
  20. |o =o .. S o . |
  21. |oE= +.o= . o . |
  22. |.+ +.ooo= = + . |
  23. | .o. +oo.+ * + |
  24. | . . o. .= ooo. |
  25. +----[SHA256]-----+
  26. #将生成的公钥导入到服务器端的~/.ssh/authorized_keys文件里
  27. [root@ansible ~]# cd .ssh/
  28. [root@ansible .ssh]# ls
  29. id_rsa id_rsa.pub
  30. [root@ansible .ssh]# cat id_rsa.pub > authorized_keys
  31. [root@ansible .ssh]# chmod 600 authorized_keys #权限必须600否则不生效
  32. [root@ansible .ssh]# cat authorized_keys
  33. ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDS7U4vgjCpWrMFwnWjUlrebldvPw5NNQpnyGT/1cTsyI6ryPm19J+IQ2wNn67BpYz0NKyLjq/hYlSxlQmD7xHwNM5KQirUYPgwPhhDqGuNE+UrBZ2lUkknt358YWGpEC+TUPy/MLNbnIepPpZr0y0qyXmtp7KpeXJwLeKLzZLpHnzA8Vr3A7w/jNaDnQJmKYvDvD0Q6O54CVkkSdxaYPAT1hVfX1pKz0dSNQbJpl5ZJXigQo26M+7qYXeUBxI5Guaapl6uT5sySzTBwwd9Yt49NKE/kIivClegVfHPGF4iSqfCiCd2BTJGTuCVBS2j4lhrjTLyWRO8po7BM4yImRGf root@www
  34. #将私钥文件id_rsa复制一份改名为rd_rsa_root并导出到宿主机桌面上
  35. [root@ansible .ssh]# ls
  36. authorized_keys id_rsa id_rsa.pub
  37. [root@ansible .ssh]# cp id_rsa id_rsa_root
  38. [root@ansible .ssh]# ls
  39. authorized_keys id_rsa.pub id_rsa id_rsa_root
 

查看导入到桌面上的私钥文件

 
 
 
 

而后xshell显示登陆成功!

 

用户权限策略

在生产环境中,如果遇到禁止root用户远程登录系统,授权仅普通用户登陆系统,那么需要管理员权限执行sudo提权即可,避免root用户之间登陆

 
  1. #创建一个普通用户yunjisuan
  2. [root@ansible ~]# useradd yunjisuan
  3. [root@ansible ~]# echo "123123" | passwd --stdin yunjisuan
  4. 更改用户 yunjisuan 的密码 。
  5. passwd:所有的身份验证令牌已经成功更新。
  6. #以root账号授权普通用户yunjisuan所有权限并免输入密码
  7. [root@ansible ~]# sed -n '93p' /etc/sudoers
  8. yunjisuan ALL=(ALL) ALL
  9. #切换到yunjisuan用户测试提权
  10. [root@ansible ~]# su - yunjisuan
  11. [yunjisuan@ansible ~]$ sudo -l
  12. 我们信任您已经从系统管理员那里了解了日常注意事项。
  13. 总结起来无外乎这三点:
  14. #1) 尊重别人的隐私。
  15. #2) 输入前要先考虑(后果和风险)。
  16. #3) 权力越大,责任越大。
  17. [sudo] yunjisuan 的密码:
  18. 匹配 %2$s 上 %1$s 的默认条目:
  19. !visiblepw, always_set_home, match_group_by_gid, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
  20. env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
  21. env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
  22. secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
  23. 用户 yunjisuan 可以在 ansible 上运行以下命令:
  24. (ALL) ALL
  25. #测试提权
  26. [yunjisuan@ansible ~]$ ls /root
  27. ls: 无法打开目录/root: 权限不够
  28. [yunjisuan@ansible ~]$ sudo ls /root
  29. anaconda-ks.cfg
 

配置xshell远程密钥登陆服务器端普通用户

 
  1. #给yunjisuan普通用户创建公钥认证。注意权限。权限过大,公钥验证会失败
  2. [root@ansible ~]# mkdir -p /home/yunjisuan/.ssh
  3. [root@ansible ~]# chmod 700 /home/yunjisuan/.ssh
  4. [root@ansible ~]# chown yunjisuan.yunjisuan /home/yunjisuan/.ssh
  5. [root@ansible ~]# cp ~/.ssh/authorized_keys /home/yunjisuan/.ssh/
  6. [root@ansible ~]# chmod 600 /home/yunjisuan/.ssh/authorized_keys
  7. [root@ansible ~]# chown yunjisuan.yunjisuan /home/yunjisuan/.ssh/authorized_keys

然后我们xshell远程登陆普通用户到Ansible服务器端 
xshell还是用刚才导入的那个私钥文件即可。

 

然后就登陆成功了。 
最后我们关闭Ansible管理服务器端的root账号SSH远程登录功能即可。

 
  1. #在生产环境我们一般是要禁止服务器root账号远程登录功能的(一旦关闭,密钥和密码登陆方式都不能再登陆)
  2. #如果我们想用root账号进行操作,那么远程密钥连接普通用户在切换成root账号即可
  3. yunjisuan@ansible ~]$ sudo su -
  4. [sudo] yunjisuan 的密码:
  5. 上一次登录:日 9月 9 21:01:31 CST 2018从 192.168.200.1pts/1 上
  6. [root@ansible ~]#
  7. #关闭Ansible管理服务器的root账号SSH远程登录功能
  8. [root@ansible ~]# sed -n '38p' /etc/ssh/sshd_config
  9. PermitRootLogin no
  10. #重启动sshd服务
  11. [root@ansible ~]# systemctl restart sshd
 

配置Ansible管理服务器sudo审计日志

Centos6.x和Centos7.x的配置方法相同,rsyslog服务是所有日志记录的服务进程

 
  1. #开启sudo日志
  2. [root@ansible ~]# echo "local2.debug /var/log/sudo.log" >> /etc/rsyslog.conf
  3. [root@ansible ~]# echo "Defaults logfile=/var/log/sudo.log" >> /etc/sudoers
  4. [root@ansible ~]# systemctl restart rsyslog
  5. #测试sudo日志记录
  6. [root@ansible ~]# exit
  7. 登出
  8. [yunjisuan@ansible ~]$ sudo su -
  9. [sudo] yunjisuan 的密码:
  10. 上一次登录:日 9月 9 21:40:11 CST 2018pts/0 上
  11. #查看/var/log/sudo.log日志
  12. [root@ansible ~]# cat /var/log/sudo.log
  13. Sep 9 21:49:12 : yunjisuan : TTY=pts/0 ; PWD=/home/yunjisuan ; USER=root ;
  14. COMMAND=/bin/su -
 

设置SSH免密码登陆

为了避免Ansible下发指令时需要输入被管理主机的密码,可以通过证书签名达到SSH无密码登陆。使用ssh-keygen产生一对密钥,并通过ssh-copy-id命令来发送生成的公钥。

 
  1. [root@ansible ~]# ls ~/.ssh/
  2. authorized_keys id_rsa id_rsa.pub
  3. [root@ansible ~]# ssh-copy-id 192.168.200.184
  4. [root@ansible ~]# ssh-copy-id 192.168.200.185

当然,我们也可以在控制端主机的hosts文件里直接写入连接方式,用户,密码也能下发指令。但是生产环境不建议这么做。因为这样明文密码容易泄露,另外如果被控制主机修改了密码,这里也需要一起更改,不便于管理。

生产环境ssh登陆策略的更多相关文章

  1. centos7生产环境下openssh升级

    由于生产环境ssh版本太低,导致使用安全软件扫描时提示系统处于异常不安全的状态,主要原因是ssh漏洞.推荐通过升级ssh版本修复漏洞 因为是生产环境,所以有很多问题需要注意.为了保险起见,在生产环境下 ...

  2. asp.net生产环境和开发环境的错误日志包装策略

    对于错误日志的输出,我们借助web.config的两个标志位: <!--全局包装异常处理页面,只有在PageError和Application_Error做清除错误操作才可不跳转--> & ...

  3. SUSE12Sp3安装配置.net core 生产环境(1)-IP,DNS,网关,SSH,GIT

    1.新增用户 sudo useradd 用户名 sudo passwd 用户名 这个时候会提示你输入密码,输入两次密码即可 2.静态 IP 设置 1.设置 IP 地址 sudo vi /etc/sys ...

  4. .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)

    Jenkins测试环境到生产环境的一键部署策略(Windows) 一.前言     前面我们已经初步实现了开发集成环境.测试环境的持续集成(自动化构建.自动化测试.自动化部署).但生产环境自动化部署迟 ...

  5. WebSocket :Nginx+WebSocket内部路由策略推送服务器的实现(附可生产环境应用代码)

    1.项目背景 前几天写了一篇WebSocket推送的博客:WebSocket :用WebSocket实现推送你必须考虑的几个问题 支持的连接数大概几千个,具体数量依赖于tomcat能并发的线程数,但很 ...

  6. linux iptables常用命令之配置生产环境iptables及优化

    在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...

  7. Greenplum 数据库安装部署(生产环境)

    Greenplum 数据库安装部署(生产环境) 硬件配置: 16 台 IBM X3650, 节点配置:CPU 2 * 8core,内存 128GB,硬盘 16 * 900GB,万兆网卡. 万兆交换机. ...

  8. 【Odoo 8开发教程】第二章:Odoo生产环境部署设置

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/10792977.html 一:dbfilter 数据库访问规则设置 一个odoo实例可以连接到不同的数据库实例中 ...

  9. [转]跳板机Jumpserve的生产环境配置

    6.跳板机Jumpserver]   Jumpserver是国内一款开源的轻便的跳板机系统,他们的官网:http://www.jumpserver.org/ 使用这款软件意在提高公司内部登录生产环境服 ...

随机推荐

  1. C语言实例:结构体

    结构体: #include <stdio.h> #include <stdlib.h> //#pragma pack(1) typedef struct{ short i; / ...

  2. 使用nginx代理kibana并配置登录验证

    由于kibana不支持登录验证,谁都可以访问,放到公网就不合适了,这里配置用nginx进行代理: 生成密码文件 如果安装了httpd可以用htpasswd,比较方便: htpasswd -c /roo ...

  3. Gradle目录结构详解

    环境:window 7 64 Gradle 版本: gradle 3.0 创建文件夹,并初始化 mkdir gradle_dir && cd gradle_dir gradle ini ...

  4. CSS 图像精灵

    图像精灵(Image Sprites) 图像精灵是放入一张单独的图片中的一系列图像. 包含大量图像的网页需要更长时间来下载,同时会生成多个服务器请求. 使用图像精灵将减少服务器请求数量并节约带宽. 图 ...

  5. 机器学习总结(一) Adaboost,GBDT和XGboost算法

    一: 提升方法概述 提升方法是一种常用的统计学习方法,其实就是将多个弱学习器提升(boost)为一个强学习器的算法.其工作机制是通过一个弱学习算法,从初始训练集中训练出一个弱学习器,再根据弱学习器的表 ...

  6. The History of spring

    Spring的出现  Spring最早出现对早期J2EE规范复杂性的回应 .虽然有些人一直认为Java EE和Spring处于竞争中,但Spring实际上是对Java EE的补充.Spring编程模型 ...

  7. 认识LDAP协议

    LDAP LDAP是Lightweight Directory Access Protocol的缩写,顾名思义,它是指轻量级目录访问协议(这个主要是相对另一目录访问协议X.500而言的:LDAP略去了 ...

  8. robotframework-ride支持python3

    最近发现robotframework的RIDE工具终于支持python3了,赶紧就安装了一下. 最新版本1.7.3.1基于wxPython4.0.4,此时的wxPython也是支持Python3.x的 ...

  9. Redis 持久化RDB 和AOF

    一.持久化之全量写入:RDB rdb配置 [redis@6381]$ more redis.conf save 900 1 save 300 10 save 60 10000 dbfilename & ...

  10. Javaweb里“容器“为何出现,应用在哪,未来发展趋势

    容器是一个Java 所编写的程序,可当做一个工具,没有容器时必须自行编写程序以管理对象关系,现在容器都会自动做好. 有一说法:如果有一个类专门用来存放其它类的对象,这个类就叫做容器.另一说法:容器里存 ...