sshd服务

sshd服务

SSH介绍

  • SSH的全称Secure Shell, 是Client/Server架构 , 默认端口号为22, TCP/IP协议
  • SSH其实用于商业, 而OpenSSH即为开源的, 在Linux中默认安装
  • SSH有v1和v2版本
    • v1: 有漏洞, 容易受到攻击
    • v2: 通过公钥加密(数字签名和密钥交换)的方式进行, 确保服务器端的身份识别
  • SSH加密算法:
    • des 对称的公钥加密算法,安全低, 数据传输速度快; 使用同一个秘钥进行加密或解密
    • rsa 非对称的公钥加密算法,安全,数据传输速度慢 ; SSH默认的加密算法
  • SSH认证方式
    • 用户密码的认证
    • 秘钥对的认证[1]

SSHD服务配置

安装软件

#openssh 为默认安装
rpm -qa | grep openssh
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64

查看软件列表

# rpm -ql openssh-server
/etc/rc.d/init.d/sshd           服务启动脚本
/etc/ssh/sshd_config      服务的配置文件
/usr/sbin/sshd              二进制的命令(程序本身)
/usr/share/man/man5/sshd_config.5.gz  配置文件的man文档
/usr/share/man/man8/sftp-server.8.gz    
/usr/share/man/man8/sshd.8.gz
 
# rpm -ql openssh-clients
/etc/ssh/ssh_config     客户端的配置文件
/usr/bin/scp              /usr/bin/一些客户端工具, 命令
...

查看配置文件(语法,选项)

cat /etc/ssh/sshd_config
# 通过man文档查找更多的选项
man 5 sshd_config

开机自启动

#CentOS6:
chkconfig --list|grep sshd
/etc/init.d/sshd status
#CentOS7:
systemctl status sshd

更多常用配置

#禁止root远程登录
#PermitRootLogin yes (默认)
PermitRootLogin no
#更改默认端口
#Port 22 (默认)
Port 10022

SSH Client

ssh使用

ssh -l pos1 -p 22 $ip
-l:指定连接用户
-p:指定端口
 
# ssh $ip hostname 在$ip主机执行hostname命令,然后退出登录输出结果

注意: 当前本机用户是root, 如果不指定连接用户, 那么会让你输入远程主机的root密码 如果指定了连接用户pos1, 那么不管你当前是什么用户就只让你输入远程主机的pos1用户密码

scp 客户端工具

用法:
将本地文件拷贝到远程:
scp 需要拷贝的文件  远程服务器
scp /data/code  pos1@$ip:/tmp/
 
将远程文件拷贝到本地:
scp 远程文件  本地路径
scp -r pos1@$ip:/tmp/dir1 /data/code
 
-r:递归拷贝目录

ssh-keygen 免交互

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

ssh首次交互免输入yes

ssh $ip -o StrictHostKeyChecking=no

禁用ssh key检查

Disable SSH host key checking for all hosts. 将以下配置添加至:vim /etc/ssh/ssh_config

对所有主机:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

仅对指定主机:

Host 192.168.0.*
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

命令行临时:

ssh $ip -o StrictHostKeyChecking=no

ssh 密钥批量推送

Note: 公司来了几台新服务器, 计划组成一个小规模集群架构;其中有一台服务器作为批量管理服务器使用

环境准备

# 操作系统``[root@dxhy-m01 ~]# cat /etc/redhat-release ``CentOS release 6.8 (Final)``# 内核版本``[root@dxhy-m01 ~]# uname -r``2.6.32-642.el6.x86_64

ssh密钥的批量分发

安装sshpass免交互工具并进行SSH-key的批量推送

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y clean all
yum makecache
# 安装sshpass工具
yum -y install sshpass

创建密钥对文件

# ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
Generating public/private dsa key pair.
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
4d:01:91:98:be:02:89:ab:ce:63:4f:81:e3:ab:0b:f8 root@m01
The key's randomart image is:
+--[ DSA 1024]----+
|       oo+.      |
|      o .  .     |
| . . .    .      |
|. +   .  o       |
| + o   .S .      |
|+ . o .          |
|+. . .           |
|++o              |
|*=E.             |
+-----------------+
[root@dxhy-m01 ~]# ls ~/.ssh/
authorized_keys  id_dsa  id_dsa.pub  known_hosts
 
命令说明:
ssh-keygen:生成密钥对命令
-t:指定密钥对的密码加密类型(rsa,dsa两种)
-f:指定密钥对文件的生成路径包含文件名
-P(大写):指定密钥对的密码

免交户方式推送公钥

sshpass -p "ssh登录密码" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.31"
Now try logging into the machine, with "ssh '-o StrictHostKeyChecking=no root@172.16.1.31'", and check in:
 
  .ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.
 
命令说明:
sshpass:专为ssh连接服务的免交户工具
-p :指定登录的密码
ssh-copy-id:自动分发公钥的工具
-i:指定公钥路径
-o StrictHostKeyChecking=no :不进行对方主机信息的写入(第一次ssh连接会在know_hosts文件里记录)

测试ssh是否免密情况

ssh root@172.16.1.31 hostname  #测试成功,免密码ssh连接

shell脚本

  • ssh_key_push.sh

    #!/bin/bash # desc:SSH密钥批量推送 User=root passWord=##Linux登录密码 function YumBuild(){ echo "正在安装epel源yum仓库,请稍后..." cd /etc/yum.repos.d/ &&\ [ -d bak ] || mkdir bak [ find ./. -type f | wc -l -gt 0 ] && find ./*.* -type f | xargs -i mv {} bak/ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo &>/dev/null yum -y clean all &>/dev/null yum makecache &>/dev/null } echo "正在进行网络连接测试,请稍后..." ping www.baidu.com -c2 >/dev/null ||(echo "无法连同外网,本脚本运行环境必须和外网相连!" && exit) [ $# -eq 0 ] && echo "没有参数!格式为:sh $0 参数1...n" && exit rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null if [ $? -gt 0 ];then YumBuild yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit) fi [ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh echo "正在创建密钥对...." rm -rf ~/.ssh/id_dsa ~/.ssh/id_dsa.pub ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" &>/dev/null for ip in $* do ping $ip -c1 &>/dev/null if [ $? -gt 0 ];then echo "$ip无法ping通请检查网络" continue fi sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no ${User}@$ip" &>/dev/null echo "$ip 密钥推送成功" done

脚本测试

bash /shell/ssh_key_push.sh 172.16.1.5 172.16.1.6 172.16.1.7 172.16.1.8 172.16.1.51 172.16.1.31 172.16.1.41 172.16.1.61
正在进行网络连接测试,请稍后...
正在创建密钥对....
172.16.1.5无法ping通请检查网络
172.16.1.6无法ping通请检查网络
172.16.1.7 密钥推送成功
172.16.1.8 密钥推送成功
172.16.1.51无法ping通请检查网络
172.16.1.31 密钥推送成功
172.16.1.41 密钥推送成功
172.16.1.61 密钥推送成功
 
备注:
故意少开了3台,脚本测试成功。

自动化工具批量管理服务器

安装ansible

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install ansible

配置主机组

[root@m01 ~]# tail -8 /etc/ansible/hosts
[server]
172.16.1.31 
172.16.1.41 
172.16.1.51 
172.16.1.5
172.16.1.6
172.16.1.7 
172.16.1.8 
# 由于已经配置过免密码的密钥认证了,所以/etc/ansible/hosts的主机映射文件只要加入被管理主机的IP地址就可以了

进行ansible批量管理测试

ansible server -m command -a "w"
 | SUCCESS | rc=0 >>
 08:47:40 up 12 min,  1 user,  load average: 0.00, 0.01, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    m01              08:47    0.00s  0.27s  0.01s /bin/sh -c /usr
......

同步/etc/hosts文件

ansible server -m copy -a "src=/etc/hosts dest=/etc/hosts backup=yes"   # backup=yes 如果目标存在文件,那么覆盖前是否备份目标文件

注意:如果目标路径存在文件,并且目标文件和你想要copy的文件完全相同的话,也会导致ansilbe的copy功能失效

初识化脚本

#!/bin/bash
# desc:服务器初期优化脚本+epel源yum仓库搭建
 
 
function ServerSystemOptimize(){
 
echo "脚本开始尝试对服务器进行一些必要的优化...." && sleep 2
/etc/init.d/iptables stop &>/dev/null && echo "防火墙已经关闭!" && sleep 1
setenforce 0 &>/dev/null && echo "SElinux 已关闭!" || echo "SElinux未开启!"
chkconfig iptables off && echo "防火墙已经取消开机启动!"&& sleep 1
sed -i '7 s/enforcing/disabled/g' /etc/selinux/config && echo "SElinux已经取消开机启动!"&& sleep 1
A=`awk '/id:/ {print NR,$0}' /etc/inittab | awk '{print $1}'`
sed -i "$A s/5/3/g" /etc/inittab && echo "Linux启动运行级别已经永久设置为3!" && sleep 1
chkconfig --list | egrep -v "rsyslog|network|crond|sysstat|sshd" | awk '{print "chkconfig",$1,"off"}' | bash &>/dev/null && echo "脚本已经关闭Linux不必要服务的开机自启动!" && sleep 1   
 
}
 
function YumBuild(){
 
echo "正在安装epel源yum仓库,请稍后..."
cd /etc/yum.repos.d/ &&\
[ -d bak ] || mkdir bak
[ `find ./*.* -type f | wc -l` -gt 0 ] && find ./*.* -type f |  xargs -i mv {} bak/
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo &>/dev/null
yum -y clean all &>/dev/null
yum makecache &>/dev/null
}
 
echo "脚本正在进行网络连接测试,请稍后..."
ping www.baidu.com -c2 &>/dev/null ||(echo "无法连同外网,或者DNS解析有问题,本脚本运行环境必须和外网相连!" && exit)
YumBuild
ServerSystemOptimize

测试脚本功能

sh /shell/server_uptimize.sh 
脚本正在进行网络连接测试,请稍后...
正在安装epel源yum仓库,请稍后...
*****************脚本开始尝试对服务器进行一些必要的优化....**********************
防火墙已经关闭!
SElinux 已关闭!
防火墙已经取消开机启动!
SElinux已经取消开机启动!
Linux启动运行级别已经永久设置为3!
脚本已经关闭Linux不必要服务的开机自启动!

用ansible进行脚本批量分发

ansible server -m copy -a "src=/shell/server_uptimize.sh dest=/server/scripts/  backup=yes"
ansible server -m shell -a "sh /shell/server_uptimize.sh"
# 或者使用scripts
ansible server -m scripts -a "/shell/server_uptimize.sh"

REF


  1. 免密码登录 ↩︎

posted @ 2020-02-16 21:02  jun's  阅读(570)  评论(0编辑  收藏  举报