干货:我的虚拟机情况,改完之后
修改相应配置:
vim /etc/ssh/sshd_conf
UseDNS no
GSSAPIAuthentication no
保存退出
重启sshd
systemctl restart sshd
服务器端:sshd, 配置文件: /etc/ssh/sshd_config
常用参数:
Port
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes 检查.ssh/文件的所有者,权限等
MaxAuthTries 6
MaxSessions 10 同一个连接最大会话
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication yes 如果使用基于Key ssh登陆的话,此项改no禁用之
GatewayPorts no
ClientAliveInterval 10 单位:秒 默认多少秒出发下面的检测,
ClientAliveCountMax 默认3 活动检测 检测3次,一共30秒,无活动断开连接
UseDNS no
GSSAPIAuthentication yes 提高速度可改为no
MaxStartups 未认证连接最大值,默认值10 可不输入密码连接最大数,之后30%随机拒绝,最大连接值为60
Banner /path/file 登陆后提示语,可起到警示作用
限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups
禁止使用protocol version 1
限制可登录用户
设定空闲会话超时时长
利用防火墙设置ssh访问策略
仅监听特定的IP地址
基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
使用基于密钥的认证
禁止使用空密码
禁止root用户直接登录
限制ssh的访问频度和并发在线数
经常分析日志
OpenSSH: ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
v2:双方主机协议选择安全的MAC方式
基于DH算法做密钥交换,基于RSA或DSA实现身份认证
基于password
基于key
相关包:
openssh
openssh-clients
openssh-server
工具:
基于C/S结构
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, putty, securecrt, sshsecureshellclient
Server: sshd
ssh客户端
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
格式:
ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
常见选项
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X:支持x11转发
-t:强制伪tty分配
ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
如下图,公钥交换原理:
服务端发送自己的公钥和会话ID给客户端,
客户端接收后用自己的公钥和会话ID做异或运算,
生成一段字符串,
再用服务器的公钥加密后,
返还给服务端,
服务端用自己的私钥解密后,
得到这段字符串,
再与会话ID异或运算,
得到客户端的公钥,
双方都持有自己的私钥公钥和对端的公钥。
如下图,ssh加密通讯
基于用户名口令登录验证
基于密钥的登录方式
基于key认证实现
基于密钥的认证:
(1) 在客户端生成密钥对,默认使用rsa算法,默认生成的密钥对存储在家目录.ssh下,**此私钥非常重要,如果被*盗取,后果不堪设想,考虑加密码,读取权限600
ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
(2) 把公钥文件传输至远程服务器对应用户的家目录,后续不指明拷贝和文件和目录都可,自行会复制自己的公钥到远端服务器的.ssh目录下,生成authorized_keys
ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试:基于密钥认证后,可以基于ssh自动化批量运维一些主机,加上for循环IP地址,实现批量增删等功能。
(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5) 此时就不需要输入密码ssh到对端,但是风险很大,下图给私钥加密码,并通过ssh-agent服务代理 ssh-add托管私钥的密码
(6) 在集群环境中,需要互相主机直接联通不需要密码,则可以使用,一个主机ssh-keygen生成私钥和公钥,然后ssh-copy-id IP(自己主机的),然后将家目录下的.ssh文件夹整个复制到集群内的其他主机,则可互相ssh不需要密码。
本地转发:
-L localport:remotehost:remotehostport sshserver
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
示例
ssh –L 9527:telnetsrv:23 -Nfg sshsrv
ssh -L 9527:172.16.36.107:23 -Nf 172.16.36.106
telnet 127.0.0.1 9527
当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
data <--> localhost:9527 <--> localhost:XXXXX <--> sshsrv:22 <--> sshsrv:YYYYY <--> telnetsrv:23
远程转发:
-R sshserverport:remotehost:remotehostport sshserver
示例:
ssh –R 9527:telnetsrv:23 –Nf sshsrv
ssh -R 9527:172.16.36.107:23 -Nf 172.16.36.105
telnet 127.0.0.1 9527
让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
Data <--> sshsrv:9527 <--> sshsrv:22 <--> localhost:<--> localhost:YYYYY <--> telnetsrv:23
动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
ssh -D 9527 root@sshserver -fNg
在本机firefox设置代理socket proxy:127.0.0.1:1080
curl --socks5 127.0.0.1:1080 http://www.google.com
如果想要让windows系统也使用centos 7当代理转发,需要在centos 7 etc/ssh/sshd_config 里开启保存退出
ssh -gD 9527 localhost
scp命令
scp [options] SRC... DEST/
两种方式:
scp [options] [user@]host:/sourcefile /destpath
scp [options] /sourcefile [user@]host:/destpath
常用选项:
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口
rsync命令
基于ssh和rsh服务实现高效率的远程系统之间复制文件
使用安全的shell连接做为传输方式
•rsync -av /etc server1:/tmp 复制目录和目录下文件
•rsync -av /etc/ server1:/tmp 只复制目录下文件
比scp更快,只复制不同的文件
常用选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
sftp命令
使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息
sftp [user@]host
sftp> help
pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具
项目:http://code.google.com/p/parallel-ssh/
pdsh:Parallel remote shell program,是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 pdsh可以使用几种不同的远程shell服务,包括标准的“rsh”,Kerberos IV和ssh
项目: https://pdsh.googlecode.com/
mussh:Multihost SSH wrapper,是一个shell脚本,允许您使用一个命令在多个主机上通过ssh执行命令或脚本。 mussh可使用ssh-agent和RSA / DSA密钥,以减少输入密码
项目:http://www.sourceforge.net/projects/mussh
说明:以上工具都包含在EPEL源中
选项如下:br/>--version:查看版本
-h:**主机文件列表**,内容格式”[user@]host[:port]”
-H:主机字符串,内容格式”[user@]host[:port]”
-A:手动输入密码模式
-i:每个服务器内部处理信息输出
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输出文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-P:打印出服务器返回信息
-v:详细模式
基本用法详解:
通过pssh批量关闭seLinux
pssh -H [email protected] -i ‘sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config’
批量发送指令
pssh -H [email protected] -i setenforce 0
pssh -H [email protected] -i hostname
命令调用变量时,单双引号显示结果不同,单引号显示远程主机变量内的内容,双引号显示当前主机变量内的内容。
pscp.pssh命令
pscp.pssh功能是将本地文件批量复制到远程主机
pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote
pscp-pssh选项
-v 显示复制过程
-r 递归复制目录
将本地curl.sh 复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
pscp.pssh -h host.txt /root/test/curl.sh /app/
将本地多个文件批量复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
将本地目录批量复制到/app/目录
pscp.pssh -H 192.168.1.10 -r /root/test/ /app/
pslurp命令
pslurp功能是将远程主机的文件批量复制到本地
pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)
pslurp选项
-L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称
-r 递归复制目录
转载于:https://blog.51cto.com/5033330/2371818