2021-10-07

第1章 ssh
SSH(22端口)是Secure Shell Protocol的简写,安装时的软件包是openssh,有ssh 1,和ssh 2两个版本
-t 指定加密类型rsa1是版本1,rsa,dsa,ecdsa是版本2
SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全
telnet(23端口)实现远程控制管理,但是不对数据进行加密,默认不支持root用户登录

1.1 ssh简介
ssh在进行数据传输之前,先对联机数据包通过加密技术进行加密处理,加密后再进行数据传输,确保传输安全
ssh是专为远程登录会话和其他网络服务提供的安全性协议(例如rsync),利用ssh协议可以有效的防止远程管理过程中的信息泄露问题,企业普遍使用ssh协议替代传统不安全的远程联机,例如telnet
1.1.1 安装ssh
默认已安装,一般将两个都安装
客户端连接服务端后生成一个其他进程,和原本的ssh进程没有关系
主要有两个进程或多个
/usr/sbin/sshd 此进程对客户端第一次连接ssh服务端有影响
sshd: root@pts/0 一但连接成功,是否可以始终保持连接由次进程决定
1.1.1.1 客户端
[root@backup ~]# rpm -qf which ssh
openssh-clients-5.3p1-122.el6.x86_64
1.1.1.2 服务端
[root@backup ~]# rpm -qf which sshd
openssh-server-5.3p1-122.el6.x86_64
1.1.2 两个功能
SSH服务主要提供两个服务功能

  1. 一是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务;
  2. 另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的,
    提供更安全的SFTP服务(vsftp,proftp)。
    1.1.3 ssh的两个版本
    sshv1与sshv2版本比较:
    v1版本钥匙和锁头默认不会变化,数据传输不安全
    v2版本钥匙和锁头会经常变化,数据传输更安全

1.1.4 工作原理
服务端ssh是一个守护进程,在后台运行并响应其他客户端的连接请求.服务端ssh服务的进程名为sshd,实时
监听其他客户端的连接请求,并进行处理,一般包括公共秘钥认证,密钥交换,对称密钥加密和非安全连接等.
客户端命令包括ssh以及scp,scp(远程拷贝),slogin(远程登录),sftp(安全ftp文件传输)这些命令

1.2 ssh加密原理
利用了公钥和私钥认证机制,实现数据加密和解密,客户端创建一对密钥向服务端发送公钥(需要输入密码),本
地保留私钥,连接时验证密钥即可,公钥在网络中传输,私钥保存在本地
分为dsa和rsa两种
ssh_host_dsa_key 私钥
ssh_host_dsa_key.pub 公钥
ssh_host_rsa_key 私钥
ssh_host_rsa_key.pub 公钥
ssh_keyscan 172.16.1.41 查看指定主机的公钥
ssh_keyscan -t dsa 172.16.1.41 查看指定主机的指定dsa格式公钥

1.2.1 公钥私钥算法
1.x 建立连接时,向客户端发送公钥,客户端如果用私钥破开,回应服务端消息,建立连接。黑客也会收到公钥,会模仿客户端私钥,打开服务端的公钥建立连接
2.x 前边的步骤和1.x大致相似,但是服务端公钥会定时更换,并通知客户端,防止黑客伪造私钥

1.3 ssh排错流程

1.4 ssh认证方法
1.4.1 基于口令验证

1.4.2 基于密钥的安全验证
需要依靠密钥,也就是必须事先建立一对密钥对,然后把公用密钥(Publiic key)放在需要访问的目标服务器上,
另外,还需要把私有密钥(private key)放在ssh的客户端或对应的客户端服务器上
私钥不能在网络中传输–私钥可以解密公钥
公钥可以在网络中传输–公钥不能解密私钥
此时,如果想要连接到这个带有公用密钥的ssh服务器,客户端ssh软件或者客户端服务器会向ssh服务器发出请求,请求用联机的用户密钥进行安全验证.ssh服务器收到请求之后,会先在该ssh服务器上连接的用户的家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的ssh客户端发送过来的公用密钥进行比较.如果两个密钥一致,ssh服务器就用公用密钥加密"质询"(challenge)并把它发送给ssh客户端,客户端使用存放在本地的私钥,解密质询,将解密后的质询发送给服务器,ssh服务器验证质询,确认无误后建立连接

1.4.2.1 简单过程
基于秘钥的认证(实现免密码管理)
①. 在管理端创建出秘钥对(创建两个信物)
②. 管理端将公钥(锁头)传输给被管理端,锁头传输给被管理端要基于密码方式认证
③. 管理端向被管理端发出建立连接请求,并发送公钥
④. 被管理端发出公钥质询
⑤. 管理端利用私钥解密公钥,进行公钥质询响应
⑥. 被管理端接收到质询响应,确认基于秘钥认证成功

服务器建立公钥档: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的档案,若系
统刚刚安装完成时,由于没有这些公钥档案,因此 sshd 会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需要的私钥档;
2. 客户端主动联机要求: 若客户端想要联机到 ssh 服务器,则需要使用适当的客户端程序来联机,包括 ssh、xshell 等客户端程序;
3. 服务器传送公钥档给客户端: 接收到客户端的要求后,服务器便将第一个步骤取得的公钥档案传送给客户端使用 (此时应是明码传送,反正公钥本来就是给大家使用的!);
4. 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥: 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的 ~/.ssh/known_hosts 。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客户端自己的公私钥数据;
5. 回传客户端的公钥数据到服务器端: 用户将自己的公钥传送给服务器。此时服务器:『具有服务器的私钥与客户端的公钥』,而客户端则是: 『具有服务器的公钥以及客户端自己的私钥』,你会看到,在此次联机的服务器与客户端的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统喔。

开始双向加解密:
(1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密;
(2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。
在上述的第 4 步骤中,客户端的密钥是随机运算产生于本次联机当中的,所以你这次的联机与下次的联机的密钥可能就会不一样啦! 此外在客户端的用户家目录下的 ~/.ssh/known_hosts 会记录曾经联机过的主机的 public key ,用以确认我们是连接上正确的那部服务器。
1.4.3 基于秘钥认证配置部署过程
1.4.3.1 管理服务器上创建秘钥对

默认保存在
[root@web01 ~]# ll /root/.ssh/
total 16
-rw------- 1 root root 1964 Jan 29 19:50 authorized_keys 其他主机分发的公钥,脚本规定更改名字
-rw------- 1 root root 1671 Jan 29 12:31 id_rsa 私钥,本地保存
-rw-r–r-- 1 root root 392 Jan 29 12:31 id_rsa.pub 公钥,发送给服务端
-rw-r–r-- 1 root root 1178 Jan 29 12:24 known_hosts 连接哪台主机就保存哪台主机的公钥
1.4.3.2 分发公钥给被管理端
-i 表示指定要分发的公钥文件
脚本中的过程是先远程登录到其他主机,在指定目录下存放公钥的过程

1.4.3.3 基于秘钥登录测试
ssh root@172.16.1.41
可以直接在登录后加命令,以被登录的主机执行这个命令,不用登录到远程主机,直接在远程主机上执行命令
例如:
ssh root@172.16.1.41 hostname -i
172.16.1.41
这就是批量管理主机
1.4.3.4 受控端默认端口不是22
受控端默认端口不是22,如何分发公钥

实现批量部署ssh+key环境时遇到的问题
创建秘钥对时需要进行交互,输入回车
需要交互确认的信息:
1)需要确认私钥保存路径
-f filename
Specifies the filename of the key file.
指定私钥文件保存路径信息参数
ssh-keygen -t rsa -f /root/.ssh/id_rsa
2)需要确认私钥密码信息
-N new_passphrase
Provides the new passphrase.
-P passphrase
Provides the (old) passphrase.

ssh-keygen -t rsa -f /root/.ssh/id_rsa -P “”
分发公钥时,需要输入yes和密码信息
vim /usr/bin/ssh-copy-id
ssh -p52113 $1 “exec sh -c ‘cd; umask 077; test -d .ssh || mkdir .ssh ;
cat >> .ssh/authorized_keys &&
(test -x /sbin/restorecon && /sbin/restorecon .ssh .ssh/authorized_keys >/dev/null 2>&1 || true)’”
1)exec sh -c — 在脚本中临时设置环境变量信息
2)cd — 切换到当前用户家目录
3)umask 077 — 设置临时的umask值
4)test -d .ssh || mkdir .ssh — 判断当前用户家目录是否存在.ssh目录,如果不存在就进行创建
5)cat >> .ssh/authorized_keys && …省略…
将当前主机秘钥对中公钥信息复制到远程主机上,在远程主机接收到公钥信息后,
将信息保存到.ssh/authorized_keys

说明:远程登录到相应主机上, 将公钥信息保存到远程主机相应用户家目录中的.ssh/authorized_keys
并将authorized_keys权限设置为600
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.31

sshpass -p123456 ssh-copy-id -i /root/.ssh/id_rsa.pub “172.16.1.7 -p52113”

1.4.4 认证代理服务
1.4.4.1 启动代理服务
eval ssh-agent -s
1.4.4.2 向agent代理服务注册本地服务器私钥信息
ssh-add
1.4.4.3 发送凭证
ssh -A 172.16.1.31 -A发送凭证 -A 可以递归赋予权限

1.4.5 免交互分发

1.4.5.1 ssh-keygen创建密钥对
rm -f /root/.ssh/id_dsa* 先删除这个目录下的公钥和私钥,防止出现覆盖的交互式信息
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P “” -q
-t 指定加密类型
-f 指定密钥存放位置
-P 指定旧的密钥的密码,可以定向为空 或者使用-N (指定新的密钥密码,效果相同)
-q不显示输出信息
放在脚本中

1.4.5.2 批量分发公钥
需要有yes/no的交互,去掉这个交互
ssh-copy-id -i /root/.ssh/id_dsapub “-o StrictHostKeyChecking=no root@172.16.1.41”
-i指定要发送的公钥 -o 后加…忽略yes/no的交互
也可以直接在客户端(管理端)配置文件/etc/ssh/ssh_config当中将StrictHostKeyChecking=no改成这样

第一次分发公钥时需要输入密码
yum install -y sshpass
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsapub “-o StrictHostKeyChecking=no root@172.16.1.41”
sshpass 指定了登录密码
1.4.5.3 完整脚本
#mk key
rm -f /root/.ssh/id*
ssh-keygen -t dsa -f /root/.ssh/id_dsa -P “” -q
#fenfa key
for ip in 7
do
echo “fenfa host 172.16.1.ip" >/dev/null sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub “-o StrictHostKeyChecking=no root@172.16.1.ip”>/dev/nullsshpass−p123456ssh−copy−id−i/root/.ssh/id
d

sa.pub"−oStrictHostKeyChecking=noroot@172.16.1.ip” >/dev/null
done

1.4.5.4 实现批量管理

#!/bin/bash

CMD=$1

for ip in 7 8 31
do
echo “info hosts 172.16.1.CMD” ssh 172.16.1.CMD"ssh172.16.1.ip “$CMD”
done
1.5 ssh配置文件
可以man sshd_config查看详细介绍
1.5.1 ssh命令和目录
加密软件
1.5.1.1 客户端
openssh-clients
/etc/ssh/ssh_config — ssh客户端配置文件
/usr/bin/.ssh.hmac — ssh服务的算法文件
/usr/bin/scp — 基于ssh协议,实现远程拷贝数据命令
/usr/bin/sftp — 基于ssh协议,实现数据传输密命令
/usr/bin/slogin — 远程登录主机连接命令 ssh登录不能用也可以用这个
/usr/bin/ssh — 远程登录主机连接命令
/usr/bin/ssh-add — 此参数必须和ssh-agent命令结合使用,将秘钥信息注册到ssh-agent代理服务中
/usr/bin/ssh-agent — 启动ssh认证代理服务命令
/usr/bin/ssh-copy-id — 远程分发公钥命令
/usr/bin/ssh-keyscan — 显示本地主机上默认的ssh公钥信息
1.5.1.2 服务端
openssh:
openssh-server
/etc/rc.d/init.d/sshd — ssh服务端启动脚本命令
/etc/ssh/sshd_config — ssh服务端配置文件
/usr/sbin/sshd — 启动ssh服务进程命令

1.5.1.3 修改服务端配置文件

1.5.1.4 设置监听地址
监听地址要么是全部监听,要么是本地网卡的其中之一

1.5.1.5 scp
不同主机之间相互复制
例如:scp -rp /etc/hosts 10.0.0.31:/tmp

1.5.1.6 sftp
sftp -oPort=52113 oldboy@10.0.0.142 — 实现ftp协议中控制链路建立
-oPort=52113 — 指定连接ssh服务端口
sftp> — 进入到ftp控制命令行中
bye — Quit sftp 退出ftp控制界面命令
ls — 显示出sftp服务端文件或目录数据信息
lls — 显示出sftp客户端(本地)文件或目录数据信息
pwd — 检查当前登录到sftp服务端之后,所在路径信息
lpwd — 检查当前登录到sftp服务端之后,客户端所在路径信息

get — 从ftp服务端下载数据
put — 从ftp客户端上传数据
mget — 批量下载数据
mput — 批量上传数据

1.5.2 防止被攻击
如何防止SSH登录入侵小结:
1、用密钥登录,不用密码登陆(课后作业)。
2、牤牛阵法:解决SSH安全问题
a.防火墙封闭SSH,指定源IP限制(局域网、信任公网)
b.开启SSH只监听本地内网IP(ListenAddress 172.16.1.61)。
3、尽量不给服务器外网IP
4、最小化(软件安装-授权)
5、给系统的重要文件或命令做一个指纹
6. 给他锁上 chattr +i +a

1.5.3 抓包内容
1.5.3.1 三次握手

1.5.3.2 四次挥手

1.5.4 linux抓包命令
tcpdump -i eth0 -nn -c 5 “port 53”
-i —指定抓取哪一个网卡上产生数据包流量
–nn —抓取数据包中端口信息以数字方式显示
-c —表示抓取的数据包数量
“port 53” — 双引号里面表示搜索数据包的条件
-w —将抓取数据保存到指定文件中
-r —对保存的数据包文件进行读取
1.5.5 ssh知识要点总结
SSH是安全的加密协议,用于远程连接linux服务器。
 SSH默认端口是22,安全协议版本SSHv2,除了2之外还有SSHv1(有漏洞)。
 SSH服务端主要包含两个服务功能SSH远程连接和SFTP服务。
 Linux SSH客户端包含ssh远程连接命令,以及远程拷贝scp命令等。

1.6 配置telnet远程连接服务

第一个里程碑:安装telnet服务软件
yum install -y telnet telnet-server

第二个里程碑:配置telnet服务可以被xinetd服务管理
vim /etc/xinetd.d/telnet
disable = no

第三个里程碑:启动xinetd服务
/etc/init.d/xinetd start
netstat -lntup|grep 23
tcp 0 0 :::23 :::
LISTEN 2427/xinetd
1.6.1 安装telnet服务软件
yum install telnet telnet-server
把telnet的客户端和服务端软件都安装
1.6.2 配置xinetd服务目录中的telnet文件
让telnet服务允许被xinetd服务管理,将disable =yes修改为disable =no
1.6.3 抓取文件包
-----------------------------------
*

原文地址:https://blog.csdn.net/RedNG/article/details/120638418

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


背景:我已经有一个ssh公钥和私钥了,绑定的是公司的码云但是绑定github是不允许的所以我需要在生成一个公钥和私钥第一步执行下面的命令, 至于如果生成ssh公钥点击这里ssh-keygen-trsa-C'your_email@example.com'-f~/.ssh/id_rsa_github然后一路回车 这里注意id_srs_g
在服务器程序的部署运维过程中,我们经常需要将文件从一个服务器拷贝到另一个服务器中。可以使用ftp,可以使用samba服务,这里我们介绍scp命令进行文件的拷贝和传输。scp是securecopy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。scp是加
#!/bin/bash#创建一个以.sc结尾的文件,把要操作的主机按顺序填写进去,多个IP另起一行顶格填写例如:#192.168.0.1#192.168.0.2#确保当前操作脚本的主机,已经可以免密到被操作主机,如未完成请自行解决。do_command(){hosts=`sed-n'/^[^#]/p'*.sc`forhost
打开终端安装openssh-server软件包:sudoaptupdatesudoaptinstallopenssh-server安装完成后,SSH服务默认自动启动,你可以通过以下命令校验服务运行状态:sudosystemctlstatusssh如果防火墙开启,则需要让防火墙允许ssh通过sudoufwallowssh注意事项VMware虚拟
环境centos7.9,.NET5一、Jenkins搭建1)下载Jenkins的war包在\home目录建一个jenkins目录放jenkins的包#进入\home目录cd\home#创建jenkins目录mkdirjenkins在jenkins目录下载war包#进入jenkin目录cd\home\jenkins#下载jenkins的war包wgethttp://mirrors.jenkin
dropbear下载地址:https://matt.ucc.asn.au/dropbeareleases/dropbear-2020.81.tar.bz2软件版本号说明opensuse 15.3 ssh8 dropbear2020.81     安装编译器和依赖:zypperinstallzlib-develgcc配置安装目录:./configure--prefix=/
1.前言前面基本上已经都讲完了MHA的原理部分,这小结主要是动手实操一下MHA2.前提准备1.首先下载MHA软件包(1)#下载mha软件mha官网:https://code.google.com/archive/p/mysql-master-ha/github下载地址:https://github.com/yoshinorim/mha4mysql-manager
前期准备确定服务器可以上网apt源配置完毕安装ssh使用apt安装openssh服务。sudoapt-getinstallopenssh-server启动sshroot@cka01:~#sudo/etc/init.d/sshstart#确定22端口存在并存活root@cka01:~#ss-tnl|grep22LISTEN01280.0.0
1.首先你需要在github上或者gitlab上建立了自己的账户,项目组已经将你加入了group。2.打开gitbash,输入命令ls-al~/.ssh如果显示如下图:则表示生成过key,可以去执行第4个步骤。否则的话执行第三个步骤生成key  3.这个时候输入命令ssh-keygen-trsa-C"min~~~~"  这
简述Linux如何远程拷贝,限速和断点续传scp命令 –远程拷贝文件scp拷贝本地文件filename到远程机器192.168.188.188服务器的/datamp目录下scp-P61204-l40000filenameusername@192.168.188.188:/datamp/ -PportSpecifiestheporttoconnecttoontherem
最近两天发现push代码到GitHub上时,发现必须得用SSH或者Token的方式。直接上干货1.SSH方式 1.1在桌面上GitBashHere 1.2检查是否已存在SSH   如果已存在,则直接进入.ssh目录1.3不存在,则创建一个SSHkey(如果不需要设置输入密码,一直回车就好)$ssh-keygen
安装命令yuminstallopenssh-clientsLinuxscp命令用于Linux之间复制文件和目录。scp是securecopy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。scp是加密的,rcp 是不加密的,scp是rcp的加强版。语法scp[-1246BCpqrv][-ccipher][-F
1.环境介绍1.本地为windows2.远程为linux2.本地安装ssh环境我这里下载了git,所以在环境变量里把/git/usr/bin加进去就可以了3.本地vscode安装远程开发插件Remote-development是一个集成插件,安装它就可以了4.生成ssh秘钥对,并将公钥放入远程机#本地机生成秘钥对$s
文章链接故障表现在使用jumperver登录AWSec2实例的时候发现ssh配合秘钥登录的时候无法登录,具体报错如下:ssh-i/path/xx.pemuser@10.0.11.190Permissiondenied(publickey,gssapi-keyex,gssapi-with-mic).问题排查过程在发现无法登录的第一时间等了AWS平台查
1.给root用户设置密码sudopasswdroot2.修改sshd配置文件sudonano/etc/ssh/sshd_config修改PermitRootLoginyes把PermitRootLoginwithout-password或者PermitRootLoginprohibit-password改为PermitRootLoginyes,注意PermitRootLoginwithout-password可能被注
手上有一台12.4的ios机器,通过SecureCrt可以ssh上去,但是每次连接的时候都会报“KeyboardInteractive”错误,skip即可,但是通过ssh客户端连接,却无法正常连接,错误提示如下:@127.0.0.1:Permissiondenied(publickey,password,keyboard-interactive) 开始以为是KeyboardInteract
1、创建私有CA并进行证书申请。1.创建CA所需要文件#生成证书索引数据库文件touch/etc/pki/CA/index.txt#指定第一个颁发证书的序列号echo01>/etc/pki/CA/serial2、生成CA私钥cd/etc/pki/CA/(umask066;opensslgenrsa-outprivate/cakey.pem2048)3、生成CA自签名证书op
克隆两台虚拟机加master三台组成一个集群 所克隆的虚拟机需要修改主机名,ip 永久修改主机名 hostnamectlset-hostnamenode1或node2 ip 方式1: 通过可视化界面直接修改 方式2: vim/etc/sysconfigetwork-scripts/ifcfg-ens33 然后重启网络:servicenetworkrestart
SSH配置文件中加密算法没有指定,默认支持所有加密算法,包括arcfour,arcfour128,arcfour256等弱加密算法。但是目前RC4是不安全算法若数据库安全性要求比较高,这个漏洞还是必须要修复的,下面记录下OracleRAC修复过程,此修复过程不影响现有系统。如有不当欢迎斧正。1、root权限用户才能
问题:通过XShell等客户端使用ssh方式通过root用户连接Ubuntu虚拟机时,出现SSH服务器拒绝了密码,请再试一次。解决:安装ssh,开启root用户登录权限。1安装ssh-serverroot@ubuntu:/etc/apt#apt-getinstallopenssh-server安装ssh-server2安装ssh-clientroot@ubuntu:/etc/apt#ap