什么是ssh?linux
Secure Shell,协议 做用:数据在网络中能够加密传输 实现:openssh 客户端:openssh-client 服务器端:openssh 端口:22 实现:dropbear
远程登陆web
telnet 明文 客户端:telnet 服务器端:telnet-server 端口:23 默认状况下,禁止用root使用telnet登陆系统 生产环境中使用telnet,测试和目标主机的指定端口是否能够正常的通讯,也就是测试目标主机的指定端口是否开放(经过端口来判断服务是否处于开启状态)
进程算法
守护进程:一个服务维护一个进程,让进程工做在后台,每一个进程都有本身的服务,可用service服务名 start|stop...进行管理 超级守护进程:一个服务维护多个进程 xinetd 瞬时守护进程:由超级守护进程负责管理的子进程就是瞬时守护进程 telnet 瞬时进程没有本身的服务,他的启动和管理依赖xinetd
sshshell
telnet scp 总结:ssh的功能 一、远程登陆 二、远程文件传输 三、相似于ftp的文件传输功能,sftp ssh的客户端和服务器端 ssh安全 ssh v1 <<废弃 RSA ssh v2 RSA DSA 如何经过公钥来判断服务器是合法的?
ssh的配置文件windows
客户端配置文件:/etc/ssh/ssh_config 服务器端配置文件 /etc/ssh/sshd_config linux ssh客户端收到的公钥文件的保存位置 ~/.ssh/known_hosts ssh服务器端的ip 加密算法 秘钥
客户端工具1-SSHcentos
客户端使用ssh两种使用方式 基于口令作登陆方式 基于秘钥作登陆方式 基于口令的认证方式 格式 ssh [options][user@]host [COMMAND] ssh [options][-l user] host [COMMAND] 说明: user:指定以哪一个用户的身份登陆远程主机,若是不指定user, 则是以当前系统的用户来登陆远程主机 command:直接在远程主机上执行命令,执行完毕后自动退出 选项: -p port:指定远程主机的ssh所使用的端口,若是不指定此选项,默认链接22端口 -t :远程执行sudo命令
客户端配置文件安全
/etc/ssh/ssh_config
基于秘钥作登陆认证(免密码登陆)bash
原理: 客户端 一对秘钥 将公钥保存在服务器端的对应帐户的家目录下的隐藏文件中(.ssh) 登陆 服务器端就会向客户端发送质询 服务器端会用预先保存的公钥来加密一段数据,而后将加密数据发送给客户端,若是客户端能够 解密,则是合法用户。 linux免密码登陆实现过程 准备linux虚拟机 172.20.225.70 clinet 172.20.225.71 server 第一步:在客户端生成一对秘钥 #ssh-keygen -t rsa 默认秘钥对的位置 /root/.ssh/id_rsa id_rsa <<<秘钥文件 id_rsa.pub <<<公钥文件 ls ~/.ssh/ id_rsa id_rsa.pub 第二步:将公钥文件传到服务器端 root登陆172.20.225.70,所以,这个公钥文件须要放在172.20.225.70的root用户的家目录下 ssh-copy-id [-i identifile] [user@]host 说明:-i 指定公钥文件的 user@host:指定传递到那个主机的那个用户的家目录下 工做原理: 一、将公钥文件传递到服务器端 二、将传递的文件更名为authorized_keys 三、修改文件的权限为600 实现命令 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.20.225.71 服务器收到客户端的公钥文件后,会自动更名为:authorized_keys openssh客户端 windows客户端 xshell putty secureCRT …… linux客户端 ssh、sftp、scp
客户端工具2-scp服务器
做用:在两个主机上互相的传递文件 格式: pull(拉取):scp [options] [user@]host:/pat/to/file /path/to/save push(推送):scp [options] /path/to/push [user@]host:/path/to/save 选项: -r:递归 -t:保留文件的属性不变(权限、时间戳) -q:静默模式 -P port:指定使用的端口(默认使用22端口) 推送例子:将本地文件/root/new1.txt推送到172.20.225.71的tmp目录下 #scp /root/new1.txt root@172.20.225.71:/tmp/ 拉取例子:将172.20.225.71下/root/11.sh 拉取到本机/home/下 #scp root@172.20.225.71:/root/11.sh /home
客户端工具3-sftp网络
格式:sftp IP ssh的服务器端的配置文件 /etc/ssh/sshd_config #Port 22 <<<< ssh服务所监听的端口 #ListenAddress 0.0.0.0 <<<< ssh服务所监听的地址 #PermitRootLogin yes <<<< 是否容许root远程登陆 #MaxAuthTries 6 <<<< 指定最大尝试次数 #MaxSessions 10 <<<< 最大并行链接会话数量(同时多少个用户尝试链接服务器) AuthorizedKeysFile .ssh/authorized_keys <<<<指定秘钥认证文件名称和路径 #PubkeyAuthentication yes <<<< 是否支持秘钥认证 PasswordAuthentication yes <<<< 是否支持口令认证 #UseDNS no <<<< 禁止作DNS反向解析 #ClientAliveInterval 0 <<<< 设置ssh登陆的空闲超时时间,单位是秒 变量:TMOUT=xx #AllowUsers= user1 user2 …… <<<< 设置白名单 #AllowGroups=gp1 gp2 <<<< 设置白名单 #DenyUsers= user1 user2 <<<< 设置黑名单 #DenyGroups=gp1 gp2 <<<< 设置黑名单 #PermitEmptyPasswords no <<<< 设置是否容许空密码 日志设施 记录日志的方式 SyslogFacility AUTHPRIV AUTHPRIV意味着日志信息会记录到/var/log/secure ssh服务器端日志 /var/log/secure 这个日志须要常常看 普通用户没有权限查看和修改 配置ssh实战 一、配置监听的端口 二、配置监听的地址 三、禁止使用ssh v1 四、设置用户白名单 五、设置空闲超时时间 六、结合防火墙设置ssd规则 七、禁止使用弱密码(数字 字母 特殊符号 长度位8字符以上) 八、尽可能使用秘钥认证 九、禁止使用空密码登陆 十、禁止root远程ssh 十一、限制尝试次数与并行链接数量 十二、将日志文件作异地备份 1三、常常分析查看日志文件 centos6和centos7的区别 service sshd status systemctl status sshd.service
用三个虚拟机实现以下效果
一、从A主机能够直接登陆B C 两个主机 二、从A主机能够直接以远程的方式在B C 两个主机上执行命令 3:从A主机能够直接向B C 两个主机发送文件 案例:让baskup主机可使用秘钥的方式登陆web1 web2……且以普通用户身份 执行秘钥分发和文件传输等操做 一、建立普通用户(三个主机都建立) [root@localhost ~]# useradd tuser [root@localhost ~]# echo "123456" | passwd --stdin tuser 二、生成秘钥对 [root@localhost ~]# su - tuser [tuser@localhost ~]$ ssh-keygen -t rsa 三、传递秘钥 [tuser@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub tuser@172.20.225.70 [tuser@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub tuser@172.20.225.71 四、登陆 [tuser@localhost ~]$ ssh root@172.20.225.70 root@172.20.225.70's password: 免密登陆 [tuser@localhost ~]$ ssh tuser@172.20.225.70 [tuser@client ~]$ 总结:在进行登陆的时候,必须保证当前用户的家目录下有.ssh/id_rsa 在对方主机的指定用户的家目录下,必需要有公钥文件.ssh/authorized_keys [tuser@localhost root]$ ssh tuser@172.20.225.70 '/sbin/ip add' [tuser@localhost root]$ ssh tuser@172.20.225.71 '/sbin/ip add' 批量获取主机的信息 userName="tuser" for i in 67 68 69 70 71 do ip="172.20.225.$i" if ! ping -c1 -W1 $ip &>/dev/null;then echo "The host $ip is not exist." else res=`ssh ${userName}@${ip} '/bin/df -h | grep sda1'` echo "==========================ip:$ip=====================" echo "The disk use infomation:$res" fi done 批量向主机传递文件 让用户输入一个文件,则将文件传递到全部的主机 若是传输成功,提示绿色成功,若是传输失败,提示红色失败,若是文件不存在,则提示无此文件。 #!/bin/bash #author:lichao #date:20190809 #function: use ssh to send file #mail:chao.il@qq.com userName="tuser" funFile=/etc/init.d/functions if [ ! -e $funFile ];then echo "Error. the funcation file not exist." exit 19 else . $funFile fi read -p "Please enter a file: " fileName if [ ! -e $fileName ];then echo "no such file." echo "bye." exit 12 fi for i in 70 71 do ip="172.20.225.$!" if ping -c1 -W1 $ip &>/dev/null;then if scp -rq $fileName $userName@$ip:~/;then action "send file to $ip" /bin/true else aciton "send file to $ip" /bin/false fi else action "send file to $ip" /bin/false fi done 案例:将文件传递到目标主机的非家目录下 [tuser@localhost root]$ echo "test page".test.page test page.test.page [tuser@localhost ~]$ scp test.page tuser@172.20.225.70:/etc/ scp: /etc//test.page: Permission denied [tuser@localhost ~]$ scp test.page tuser@172.20.225.70:~/ test.page 没有权限 分两步: 一、将文件传递到目标主机的家目录下 二、远程执行移动命令,将家目录下的文件移动到目标位置 [tuser@localhost ~]$ scp test.page2 tuser@172.20.225.70:~/ test.page2 100% 10 10.8KB/s 00:00 bash-4.2# ls /home/tuser/ .bash_history .bash_logout .bash_profile .bashrc .ssh/ test.page test.page2 bash-4.2# visudo tuser ALL=(ALL) NOPASSWD: /bin/mv [tuser@localhost ~]$ ssh -t tuser@172.20.225.70 'sudo mv ~/test.page2 /etc/' Connection to 172.20.225.70 closed. bash-4.2# ls /etc/te terminfo/ test.page1 test.page2
配置sshd服务
端口 0-65535 小于1024的端口:是由系统保留使用的 自定义端口一般用1024以上的端口 端口的做用:在系统当中惟一的标识一个进程 这样就能够现实将发送给指定端口的数据转发到指定的进程中 系统中每一个进程在启动的时候,会自动个向注册使用一个端口,当有发送到这个端口的数据的时候, 内核会根据端口的记录转发给指定的进程。 一个主机向另外一个主机发送数据包的时候,在数据包中已经指定了这个数据包是给多少号端口的 做用:用来实现让客户端使用22端口来远程登陆 配置文件: /etc/ssh/sshd_config <<<<<这是服务端的配置文件 /etc/ssh/ssh_config <<<<<这是客户端的配置文件 安全操做 一、修改sshd的服务端口 # vi /etc/ssh/sshd_config Port *** # service sshd restart 二、解决xshell登陆缓慢的问题 将UseDNS yes 改成 UseDNS no 将GSSAPIAuthentication 改成 GSSAPIAuthentication no 三、容许root用户登陆 PermitRootLogin yes 改成no 后root用户登陆不了系统