Linux 期中架构 SSH
为其他网络服务提供安全协议。替代Telnet
SSH: 实现数据加密传输 22 默认支持root用户远程连接
类似sftp-server服务
nmap -p 22 10.0.0.41
nc 10.0.0.41 22
telnet:实现数据明文传输 23 默认不支持root用户远程连接
### 1个服务始终无法启动
## |
01 查日志 |
## |
02 检查服务端口有无冲突 |
## |
netstat -lntup | grep 873 |
##ssh远程服务对比
如何实现telnet远程管理:
服务端配置
第一里程:下载安装telnet远程管理服务端软件
yum install -y telnet-server telnet
第二里程:编写xinetd文件,实现管理telnet服务
特殊的服务:telnet rsync
vim /etc/xinetd.d/telnet
disable = no
第三里程:启动telnet服务
/etc/init.d/xinetd start
第四里程:进行服务检查测试
netstat -lntup|grep 23
[root@m01 ~]# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
ssh 服务与telnet服务区别
ssh服务是加密服务协议 telnet是非加密服务协议
ssh服务默认支持root用户登录 telnet不支持root用户登录
SSH知识要点 SSHv2 SSH和SFTP SCP
SSH服务命令说明
查看命令属于哪个命令大礼包
[root@m01 ~]# rpm -qf `which ssh`
openssh-clients-5.3p1-122.el6.x86_64
[root@m01 ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config --客户端配置文件
/usr/bin/.ssh.hmac
/usr/bin/scp ###远程复制命令
/usr/bin/sftp ###远程文件传输服务
/usr/bin/slogin ###远程登录命令 slogin 10.0.0.41
/usr/bin/ssh ###远程登录管理主机命令
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id ###ssh服务分发公钥
/usr/bin/ssh-keyscan
/usr/libexec/openssh/ssh-pkcs11-helper
[root@m01 ~]# rpm -ql openssh-server
/etc/pam.d/ssh-keycat
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd ###ssh服务启动脚本文件
/etc/ssh/sshd_config ###ssh服务配置文件
/etc/sysconfig/sshd
/usr/libexec/openssh/sftp-server
/usr/libexec/openssh/ssh-keycat
/usr/sbin/.sshd.hmac
/usr/sbin/sshd ###ssh服务进程启动命令
[root@m01 ~]# ps -ef | grep ssh
root 1182 1 0 01:19 ? 00:00:00 /usr/sbin/sshd
root 6246 1182 0 08:04 ? 00:00:00 sshd: root@pts/0
root 6280 6248 0 08:09 pts/0 00:00:00 grep ssh
启动命令:/usr/sbin/sshd 要用绝对路径进行启动
SSH服务软件版本
SSH服务是守护进程服务daemon sshd
SSH服务实现连接安全建立连接,利用钥匙和锁头
01 钥匙==私钥 公钥==锁头 私钥可以解密公钥(钥匙可以开启锁头)
02 公钥可以在网络中传输,私钥可以在本机主机保存
1)客户端发出远程连接请求
2)服务端会响应一个确认信息
3)客户端进行确认并输入密码信息
4)服务端会发送一个公钥信息(锁头)给客户端
5)客户端拥有了公钥(锁头)信息
sshv1版本:钥匙和锁头不会定期更换,容易被黑客人员破解
sshv2版本:钥匙和锁头会进行定期更换,不容易被黑客人员破解
SSH服务认证类型
基于密码的方式:交互方式远程连接
基于密钥的方式:免交互方式远程连接
基于密钥:
基于密钥方式工作原理:
1)在客户端创建出新的钥匙和锁头,创建了一个密钥对
2)客户端将锁头传输给服务端(基于密码传输)
3)服务端保存后接受公钥文件(锁头)
4)当客户端再次请求和服务端建立连接
5)服务端会进行公钥质询过程
6)客户端利用私钥解密公钥,将解密结果发给服务端
7)最终实现客户端和服务端远程连接建立
SSH面试考题
[root@m01 ~]# ss -lntup | grep 22
tcp LISTEN 0 128 :::22 :::* users:(("sshd",1182,4))
tcp LISTEN 0 128 *:22 *:* users:(("sshd",1182,3))
SSH配置文件信息
ssh配置文件修改--默认登录参数
[root@m01 ~]# cd /etc/ssh/
[root@m01 ssh]# ll
total 156
-rw-------. 1 root root 125811 Mar 22 2017 moduli
-rw-r--r--. 1 root root 2047 Mar 22 2017 ssh_config
-rw------- 1 root root 3876 May 2 14:52 sshd_config
/etc./ssh/sshd_config ###sshd配置文件
01 井号注释的参数信息 表示默认配置
修改默认端口号
#Port 22 ###进行修改
#ListenAddress 0.0.0.0
配置文件修改后要重启才能生效
[root@m01 ssh]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
#ListenAddress 0.0.0.0 ###10.0.2.10 -->指定监听的网卡信息
SSH监听配置测试
如果连接慢需要修改2个参数
GSSAPIAuthentication no
UseDNS no
SSH服务入侵防范
[root@m01 ssh]# nmap -p 1-1024 www.baidu.com
Starting Nmap 5.51 ( http://nmap.org ) at 2018-06-04 09:27 CST
Nmap scan report for www.baidu.com (61.135.169.121)
Host is up (0.025s latency).
Other addresses for www.baidu.com (not scanned): 61.135.169.125
Not shown: 1022 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 49.93 seconds
SSH服务相关命令用法
01 SSH远程登录命令
02 SCP远程复制数据命令
03 SFTP命令 数据传输命令
###SSH-key基于密钥认证部署
管理机:M01
受控端:backup
nfs01
web01
部署过程:(运维领域:越安全 效率越低 效率越高安全性越低)
1 第一个里程碑 在管理服务器上创建密钥对信息 (公钥和私钥)
[root@m01 ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): ###私钥创建后保存位置
Enter passphrase (empty for no passphrase): ###确认私钥需不需要进行加密设置密码,测试环境设置为空
Enter same passphrase again: ###设置密码为空
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:
83:63:87:1d:98:cc:4a:d2:c0:f5:0c:b0:78:5d:bb:bf root@m01
The key's randomart image is:
+--[ DSA 1024]----+
| .ooo . |
| ..= B + |
|. + + O . |
| . o . = . |
| . * S |
| . + . |
| . |
| . |
| E |
+-----------------+
[root@m01 ~]# cd /root/.ssh/
[root@m01 .ssh]# ll
total 12
-rw------- 1 root root 672 Jun 4 10:21 id_dsa ###创建生成的私钥文件(钥匙)
-rw-r--r-- 1 root root 598 Jun 4 10:21 id_dsa.pub ###创建生成的公钥文件(锁头)
-rw-r--r-- 1 root root 786 May 19 15:53 known_hosts
2 第二个里程碑 分发公钥文件 id_dsa.pub --> authorized_keys
-i 指定要分发的公钥文件和路径信息
[user@] ---以什么用户分发公钥 如果不输入以当前系统用户分发公钥
machine -->将公钥分发到哪台主机上
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.8
The authenticity of host '172.16.1.8 (172.16.1.8)' can't be established.
RSA key fingerprint is c8:17:90:8d:90:a4:f7:5b:10:19:36:7a:6c:5d:b8:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.8' (RSA) to the list of known hosts.
root@172.16.1.8's password:
Now try logging into the machine, with "ssh 'root@172.16.1.8'", and check in: <--现在可以试图登录远程主机,利用ssh root@172.16.1.8 进行登录 -->
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
[root@nfs01 ~]# ll /root/.ssh/
total 8
-rw------- 1 root root 1794 Jun 4 10:42 authorized_keys
3 第三个里程碑 登录测试 不要输入密码就可以直接登录了
[root@m01 ~]# ssh root@172.16.1.8
Last login: Wed May 23 21:40:28 2018 from 10.0.0.1
[root@web02 ~]#
说明:显示以上信息表明基于密钥的登录信息已经成功了
4 第四个里程碑 免登录执行命令操作
[root@m01 ~]# ssh root@172.16.1.8 "hostname -i" --> 不用登录到远程主机,直接在远程主机上执行命令 返回输出结果
172.16.1.8
说明批量管理主机
###基于密钥批量管理主机的扩展
思考:如果服务端端口号修改了,可以正常分发公钥?
[root@m01 bin]# vim ssh-copy-id
A:第一种解决方法 在$1 前新增 -p52113 (修改的端口),再次执行分发公钥就可以解决
B:第二种解决方法
在语句:ssh-copy-id -i /root/.ssh/id_dsa.pub root@172.16.1.31当中
$1 表示的是root@172.16.1.31
修改后的语句为:ssh-copy-id -i /root/.ssh/id_dsa.pub "-p52113 root@172.16.1.31"
shift参数,在shell当中很有用;
作用: sh test.sh a b c d
echo $1 $2 $3 $4
shift -->将传参的参数向前递进
循环:for 循环
white 循环
until 循环 循环条件为真时 停止循环,为假时,一直循环(死循环)
[root@m01 scripts]# cat shift.sh
#!/bin/bash
until [ $# -eq 0 ] ### $# 传参的总个数
do
echo $* ### $* 把所有传参的参数都输出出来
shift
done
[root@m01 scripts]# sh shift.sh 1 2 3 4 5 6
1 2 3 4 5 6
2 3 4 5 6
3 4 5 6
4 5 6
5 6
6
说明 分发公钥的实质 ,就是通过ssh远程执行公钥命令
1 切换到用户家目录下;临时设置umask值
2 test 类似于if 判断客户端相应用户家目录中有没有.ssh目录;如果没有就进行创建
3 将管理端公钥文件中的内容添加到客户端 .ssh/authorized_keys 默认该文件不存在;需要创建,文件权限(600)
问题2 01 分发公钥时实现免交互
为什么要实现免交互:
当被管理主机众多时,需要采用批量分发,通过批量分发脚本,会产生阻碍因素,因此期望能够实现免交互
阻碍脚本运行的因素
01 创建密钥对时,需要进行交互
a 指定创建私钥文件保存路径
b 指定私钥文件加密的密码信息
02 分发公钥时,需要进行交互
a 需要yes/no 确认交互
b 第一次分发公钥要输入密码
批量分发公钥脚本
#!/bin/bash
\rm /root/.ssh/id_dsa*
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" &>/dev/null
#ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q ### 等价于上一种写法 -q安静的执行 不要输出
#分发密钥文件
for ip in
do
echo "==================================fenfa begin======================================="
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip"
echo "==================================fenfa end========================================"
echo ""
done
密斗性
脚本编写完要可以反复执行 而且没有报错
该脚本依赖需要安装sshpass
[root@m01 scripts]# rpm -qa sshpass
sshpass-1.06-1.el6.x86_64
部署完毕后要检查:
[root@m01 scripts]# ssh 172.16.1.8 hostname
web02
批量检查脚本:
#!/bin/bash
#ssh 172.16.1.41 free -m
#ssh 172.16.1.31 free -m
#批量测试的脚本更新版本
CMD="$1"
for ip in
do
echo "========>INFO 172.16.1.$ip<======="
ssh 172.16..$ip "$CMD"
echo "========>INFO end<========="
echo ""
done
执行结果:
[root@m01 scripts]# sh batch_manger1.sh "hostname"
========>INFO 172.16.1.31<=======
nfs01
========>INFO end<=========
========>INFO 172.16.1.41<=======
ssh: connect to host 172.16.1.41 port 22: Connection timed out
========>INFO end<=========
========>INFO 172.16.1.8<=======
web02
========>INFO end<=========
最新文章
- QT 数据库编程一
- 如何实现Android 中断线程的处理
- MySQL中用户授权/删除授权的方法
- YSPASYS 中小型企业简单员工评价考核系统
- Docker系列(四)Dockerfile
- JAXB--学习2
- c语言指针点滴1
- nginx install lua module
- /export/App/zz/phantomjs-1.9.7-linux-x86_64/bin
- Windows 8 应用开发 - 本地数据存储
- win7下sublime text3 安装Emmet的pyv8
- 开发Angular库的简单指导(译)
- Gradle、Gradle Wrapper与Android Plugin for Gradle
- Python学习---字符串处理
- 我的第二个独立开发的邮箱类App—“简邮”(支持QQ、雅虎、阿里云、Outlook)
- NGUI实现滑动屏幕的时候,进行环形旋转
- IO 流读取文件时候出现乱码 文件编码格式问题 怎么转换解决方法
- 找bug hhh
- OKHttpUtil工具类
- iOS - iphoneX系列 - 全局配置的基本信息
热门文章
- DevExpress v17.2新版亮点—WPF篇(二)
- Crystal Report Error: Either the Crystal Reports registy key permission are insufficient or the Crystal Reports runtime is not installed correctly
- windowns 下备份mysql数据库
- oracle function用法(本文来自百度文库)
- HDU 4862
- 7.3 5种IO模型与IO复用
- Docker教程-01.安装docker-ce-18.06
- ubuntu16.04 中文输入法
- Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
- 动画Completed事件里获取执行该动画的UI对象