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脚本
-
#!/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
免密码登录↩
来源:https://www.cnblogs.com/CoolMark-blog/p/12318726.html