ssh服务

ssh服务是什么?

  • ssh-- secure
    shell,是一个远程登录程序,一个对数据进行加密传输的服务,主要用在远程登录(一般来说用于远程登陆但是自己也可以登录自己)允许用户在远程机器上执行任何命令,让标准输出在本地;早期明文远程协议是telnet,但之后变成了测试工具。
  • ssh是应用层协议,主要在HP-UX,LINUX,AIX,UNIX系统上都有,windows上没有
    -ssh默认端口是22

ssh常见的两种登录方式

  • 密码登录
  • 密钥登录(免密码登录)

ssh配置

  • 官方站点:http://www.openssh.com
  • 主要软件包:openssh-server、openssh-clients
  • 服务名:sshd
  • 服务端主程序:/usr/sbin/sshd 这是一个可执行文件 (直接启动systemctl start sshd 关闭 systemctl stop sshd)
  • 客户端主程序:/usr/bin/ssh
  • 服务端配置文件:/etc/ssh/sshd_config
  • 客户端配置: ~/.ssh/config
    服务启动:一是找到它的主程序文件,直接运行,第二是使用systemctl启动,但是在使用systemctl服务之前,要确保/lib/system/system 下的.service文件里面是否有相应的服务。

修改ssh配置

配置文件的位置 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config

  • Port 2233 #修改默认监听端口(默认22端口)
  • ListenAddress 192.168.0.132 #设置本机监听ip地址,默认为0.0.0.0(表示在本机任意ip地址上监听)
  • PubkeyAuthentication yes #是否开启公钥认证
  • AuthorizedKeysFile .ssh/authorized_keys #配置公钥认证的文件
  • PasswordAuthentication no #是否开启密码认证,默认为yes
  • UsePAM yes #使用pam认证 (pam认证模块 --》配置路径/etc/pam.d 这个目录下面存放的是每个需要认证的服务的配置,文件名就是服务名)
  • UseDNS yes #是否将客户端主机名解析为ip(此过程不顺利的话,会非常的慢,会影响登陆认证的速度,可以将其设置为no)
  • PermitRootLogin no #不允许root用户登陆,默认为yes

修改配置之后reload重新加载

查看ssh服务是否启动

  • ps -ef|grep ssh
  • pidof sshd
  • netstat -aptln|grep ssh
  • lsof -i:22

两种加密方式

对称加密

加解密的钥匙都是同一把(双方都知道,就像接暗号)(两把钥匙)所以怎么样安全的保存这个密钥成为了一个很重要的问题, 很难保证这个密钥不被泄漏

非对称加密

生成一对公私钥,私钥自己保管,公钥可以给其他人。(一个钥匙一把锁),公私钥对是成对存在的,一个用于加密,一个用于解密。具体哪个为私钥,哪个为公钥就看使用者自己管理。
需要注意的是:
使用公钥进行加密,私钥解密,基本用于数据加密
使用私钥加密公钥解密,用于认证

公钥认证,免密码登入步骤

以A登录B为例
1、在A机器上生成公私钥对,生成之后默认会放在当前用户家目录下的.ssh/文件下 id_rsa(私钥),id_rsa.pub(公钥),使用 ssh-keygen生成(中间一直敲回车,选择默认)
2、在B机器上目标用户的家目录下~/.ssh/authorized_keys文件里将A机器的公钥复制粘贴过来,如果没有这个文件的话就创建,并且设置权限为600
3、查看公钥认证是否成功,在A机器上执行 ssh root@B机器的ip(如果id_rsa没有放在家目录下,那么在用ssh时接-i指定id_rsa私钥路径),不需要输入密码就可以登录到B机器,则表示免密码登录成功。

公私钥认证排错

  • 确保公钥复制正确了
  • 确保~/.ssh/authorized_keys文件权限为600
  • 确保家目录以及.ssh目录权限为755以下权限,即属组和其他人没有7的权限
    注意:登陆时默认会去寻找家目录下的~/.ssh/id_rsa去进行验证,所以尽量不要在生成key的时候将它的默认路径更改。
  • 注意关闭防火墙和selinux(iptables –F 清空防火墙规则)

ssh命令参数

  • -vvv 看详细信息
  • -l 指定登陆的用户名
  • -p 指定server的端口
  • -i 指定私钥文件,默认会在~/.ssh/去找私钥
  • -o 接特定设置选项
    ssh 192.168.0.35 #不接任何用户名,会默认以当前A机器所在用户登陆B机器同名的用户,不管B机器有没有这个用户

登录验证原理

密码登录

client向server发送登陆请求,server将自己的公钥(服务器的公钥/etc/ssh 三对)发送给client。
client使用这个公钥,将密码进行加密,发送给server
server用私钥解密登陆密码,验证合法性
server返回验证结果给client

在这里插入图片描述

公钥认证登录

client端生成公钥对,将公钥追加在server端的~/.ssh/authorized_keys
发送登陆请求,server收到请求之后,生成随机字符串发送给client
client用自己的私钥对字符串进行加密,发送给server。
server收到加密字符串之后用公钥解密,比较解密出的字符串和之前生成的字符串是否一致最后返回结果给client

在这里插入图片描述

中间人攻击

  • 在密码登录的过程中有一个问题, 怎么保证收到的公钥就是目标server的公钥?(中间人攻击)
    如果一个攻击者中途拦截了client的登陆请求,发送自己的公钥给client,client端就会用攻击者的公钥进行数据加密,攻击者接收到信息后,用自己的私钥就可以解密了,这就窃取了client的登陆信息了。
  • 为了解决这个问题,client端第一次登陆的时候,会进行一个登陆公钥确认。
    确认server服务端的这个host主机摘要,确认成功之后就会将server端的pubkey保存在~/.ssh/known_hosts里面
    以后每次连接都会验证这个know_hosts里的key和收到的pubkey是否一致。
  • 查看公钥指纹ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub;server主机的pubkey保存在/etc/ssh/目录下,默认使用 ssh_host_ecdsa_key.pub

跳板机(堡垒机)

ssh-agent管理密钥 一个代理程序,帮助我们管理私钥

  • 配置方法(以xshell为例):xshell–> 主机属性–》ssh --》勾选 使用xagent进行身份验证 勾选使用代理转发

在这里插入图片描述

  • ssh-add id_rsa #添加主机密钥给agent管理
  • ssh-add -l #查看agent管理了哪些密钥

安全加固

1、不能密码登录
2、不能使用root登录
3、修改默认端口
4、添加防火墙配置
5、使用跳板机登录

pssh pscp命令(批量处理)

pssh

  • -h 指定主机文件列表,内容格式"[user@]host[:port]"
  • -i 指定每个服务器的处理信息

批量传输文件

pscp.pssh
[luoziyao@a ~]$ pscp.pssh -h ip.txt pscptest /tmp #把当前目录下的pscptest文件传送到目标主机的/tmp目录下
[1] 17:37:21 [SUCCESS] luoziyao@192.168.0.48:2233
[2] 17:37:22 [SUCCESS] luoziyao@192.168.0.39:2233

ssh远程执行命令

ssh B “/usr/sbin/ip a”

scp命令

传输文件

  • scp aa(文件) B:/tmp 把aa文件传输放在B机器的/tmp目录下
  • scp B:/tmp/aa ./ 把B机器的/tmp/aa文件拷贝到当前机器的根目录下
  • scp -P 22 onekey_install_mysql_binary_v3.sh root@192.168.77.132:/opt

没有指定别名的传输

传输目录

  • scp -r adir B:
    adir-1 100% 0 0.0KB/s 00:00
    adir-2 100% 0 0.0KB/s 00:00
  • scp -r adir B:bdir
    adir-1 100% 0 0.0KB/s 00:00
    adir-2 100% 0 0.0KB/s 00:00

sftp命令

sftp命令是一款交互式的文件传输程序,命令的运行和使用方式与ftp命令相似,但是,sftp命令对传输的所有信息使用ssh加密,它还支持公钥认证和压缩等功能。

  • sftp apple@127.0.0.1
  • sftp apple@127.0.0.1:/home/xx
  • Connected to apple. sftp> ls 2q
    aa adir bb bdir testdir testdir2 testhost
  • sftp> get 2q
    Fetching /home/sanchuang/2q to 2q
    /home/sanchuang/2q 100% 226 107.5KB/s 00:00

fping批量ping

  • 根据文件指定ip去ping

fping -f ip-2.txt
192.168.0.39 is alive
192.168.0.48 is alive

  • 根据网段去ping
    fping -g 192.168.0.0/24

SSH实现访问控制

ssh tcp wrappers,SSH使用TCP Wrappers实现访问控制

  • 主要配置文件

/etc/hosts.allow
/etc/hosts.deny

  • TCP Wrappers可以控制哪些服务
    受super daemon(xinetd)管理的服务
    支持libwrap.so模块的服务
  • TCP Wrappers的访问控制原则
    首先检查 hosts.allow 文件,若找到相匹配的策略,则允许访问
    否则继续检查 hosts.deny 文件,若找到相匹配的策略,则拒绝访问
    如果两个文件中都没有相匹配的策略,则允许访问

ssh隧道

端口转发
1、关闭防火墙
2、关闭selinux

本地端口转发
实验环境:
a: 192.168.0.132
c: 192.168.0.48
b: 192.168.0.39
在c主机上执行: [root@C .ssh]# ssh -g -L 15577:192.168.0.39:80 192.168.0.39 -p 2233
把b主机的80端口映射到本地的15577端口
访问c主机的15577端口就是访问b主机的80端口

远程端口转发:
在c主机上执行:[root@C .ssh]# ssh -R 15566:192.168.0.39:80 -fN 192.168.0.132 -p 2233
把b主机的80端口映射到a主机的15566端口
访问a主机的15566 就是访问b主机的80

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值