文章目录
- 知识点1 跳板机
- 示例1:查看路由 ip r
- 示例2:A机器登录到B机器(简化登录) vim .ssh/config
- 示例3:查看端口是否可以访问(即服务是否可达) telnet 192.168.0.31 2233
- 示例4:提示主机不被信任 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- 示例5:永久修改主机名 hostnamectl set-hostname "A"
- 示例6:查看进程数 pstree -p
- 示例7:修改客户端配置 ~/.ssh/config
- 示例8:远程执行命令 ssh B
- 示例9:远程传输 scp (前提ssh可以连接)
- 示例10:sftp传输文件 (前提ssh可以连接)
- 示例11:pssh pscp命令 (前提ssh可以连接)
- 示例12:pscp.pssh 批量传输文件 (前提ssh可以连接)
- 示例13:fping
博客cPen_web
知识点1 跳板机
#注:跳板机给办公人员用的 跳板机/堡垒机 为了保护系统的安全
#注:使用ssh-agent 访问跳板机和想要访问的主机
#注:使用场景 阿里的业务 本来有10万台主机(在局域网里面,没有外网,外部不能访问),我在家里,十万台机器捞出一台,这1台主机可以访问外网(跳板机/堡垒机),这1台跳板机的配置尤其重要
开启ssh-agent,把自己主机的公钥添加到目标主机和堡垒机下 (目标主机的权限和堡垒机的权限)
#注:连到A上,从A跳到B上,B不一定有当前主机的公私钥
#跳板机 安全加固:
不能使用root直接登录,使用sudo赋予相应权限
不能使用默认端口登录
不能使用密码登录,都使用公钥登录
添加防火墙配置
总结:
#跳板机
#安全加固
1、不能使用密码登录
2、不能使用root登录
3、修改默认端口
4、添加防火墙配置
5、使用跳板机登录
示例1:查看路由 ip r
[root@cPen_python ~]# ip r # 注:查看路由
default via 192.168.0.1 dev ens33 proto dhcp metric 100
192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.32 metric 100
[root@cPen_python ~]# ip r delete default via 192.168.0.1 # 注:删除网关
[root@cPen_python ~]# ip r
192.168.0.0/24 dev ens33 proto kernel scope link src 192.168.0.32 metric 100
[root@cPen_python ~]# ping www.baidu.com # 注:删除后ping不通外网
connect: 网络不可达
[root@cPen_python ~]# ping 8.8.8.8
connect: 网络不可达
[root@cPen_python ~]# ip r add default via 192.168.0.1 # 注:还原
示例2:A机器登录到B机器(简化登录) vim .ssh/config
#以后会遇到很多机器,ip地址是记不住的
#A机器登录到B机器,操作前需要先把A机器公钥放到B机器上 进行授权
#不修改全全局配置,只修改个人配置:在用户家目录下创建.隐藏文件
#在客户端上配置(配到自己的主机上)
#注:意思是将机器root@192.168.0.31 -p 2233 取个别名叫B
#ForwardAgent yes
#StrictHostKeyChecking no # 注:是否输入yes
#ServerAliveInterval 60 # 注:存活时间
#IdentityFile ~/.ssh/id_rsa # 注:认证文件
#示例如下
[root@cPen_python ~]# vim .ssh/config
###############################################
ForwardAgent yes
StrictHostKeyChecking no
ServerAliveInterval 60
IdentityFile ~/.ssh/id_rsa
###############################################
Host B
HostName 192.168.0.31
User cPen
Port 2233
[root@cPen_python .ssh]# chmod 600 config # 注:授予权限 不执行这条语句 可能会报错
[root@cPen_python .ssh]# ssh B
Last login: Mon Nov 23 15:05:16 2020 from 192.168.0.32 # 注:登录成功
[root@cPen_centos8 ~]#
#注:即简化 # ssh 192.168.0.31 -l root -p 2233 操作 (比如登录到ftp服务器 ssh ftp)
示例3:查看端口是否可以访问(即服务是否可达) telnet 192.168.0.31 2233
#ping命令 是查看2台机器网络是否连通
#查看服务是否可达使用 telnet命令
#示例:查看端口是否可达(服务是否可达)
[root@cPen_python .ssh]# yum install telnet -y
[root@cPen_python .ssh]# telnet 192.168.0.31 2233
Trying 192.168.0.31...
Connected to 192.168.0.31. # 注:服务可达
Escape character is '^]'.
SSH-2.0-OpenSSH_8.0
示例4:提示主机不被信任 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
#注:提示WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
将~/.ssh/known_hosts 删掉
示例5:永久修改主机名 hostnamectl set-hostname “A”
#方法1
[root@cPen_python .ssh]# hostnamectl set-hostname "A"
#注:其实是修改 /etc/hostname
[root@A ~]# less /etc/hostname
#方法2
#或者直接修改 /etc/hostname
#临时修改主机名
[root@B ~]# hostname cp
示例6:查看进程数 pstree -p
#注:看程序树状结构 pstree -p
[root@cPen_python .ssh]# pstree -p |grep sshd
|-sshd(1065)-+-sshd(3782)---bash(3784)
| |-sshd(3980)---bash(3982)-+-grep(4318)
| |-sshd(4059)---bash(4061)
| `-sshd(4288)---bash(4290)
#注:前面是父程序,后面是父程序创造出来的子程序,子程序分配新的bash环境,bash环境在操作命令grep
#注:父进程创造出子进程,子进程有创造出一个子进程,子进程创造出一个新的bash环境
#-------------------------------------------------------------------------------------------
#注:连接到B机器后bash环境多了一个ssh子进程去处理B机器
[root@a ~]# ssh B
Last login: Mon Nov 23 15:52:16 2020 from 192.168.0.32
[root@a .ssh]# pstree -p |grep sshd
|-sshd(1065)-+-sshd(3782)---bash(3784)
| |-sshd(3980)---bash(3982)-+-grep(4325)
| |-sshd(4059)---bash(4061)---ssh(4323)
| `-sshd(4288)---bash(4290)
示例7:修改客户端配置 ~/.ssh/config
#配置文件:~/.ssh/config
#工作中使用跳板机代理登录 (客户端的配置,方便开发配置)
#注:假设现在有A、B、C三台机器,B是跳板机,假设A C不通,A通B,B通C,B通D,B通E…………
#注:B机器当做跳板机,A是自己的本地机,A机器做代理,B机器自动做转发
#注:在本地机A机器中操作
[root@a ~]# vim ~/.ssh/config
###############################################
ForwardAgent yes
StrictHostKeyChecking no
ServerAliveInterval 60
IdentityFile ~/.ssh/id_rsa
###############################################
Host B
HostName 192.168.0.31
User sanchuang
Port 2233
Host 192.168.0.54
User sanchuang
Port 2233
ProxyCommand ssh 192.168.0.31 -W %h:%p -l sanchuang -p 2233
#注:ProxyCommand表示 A通过跳板机(192.168.0.31)B登录到
#-------------------------------------------------------------------------------------------
Host * /ftp* /10.* 以10网段开头的ip地址 ssh 10.0.0.1 跳到这个配置执行
User sanchuang
Port 2233
ProxyCommand ssh B nc %h %p -w 10 2>/dev/null
#注:上课时冲突 前面写Host *与ssh B冲突
示例8:远程执行命令 ssh B
#不登录B机器,执行B机器上的命令 (一般用于脚本)
[root@a ~]# ssh B ifconfig # 注:登录到B执行 ifconfig命令
[root@a ~]# ssh B ip a # 注:登录到B执行 查看ip地址 命令 ;命令的返回是B机器给的
[root@a ~]# ssh B "/usr/sbin/ip a" # 注:脚本里建议使用命令的绝对路径
示例9:远程传输 scp (前提ssh可以连接)
#注:传输文件
[root@a ~]# touch ahost
[root@a ~]# scp ahost B:/tmp # 注:将A机器 当前路径ahost文件cp到B机器下的/tmp路径下
ahost 100% 0 0.0KB/s 00:00
[root@a ~]# scp B:/tmp/bhost ./ # 注:将B机器 /tmp/bhost文件cp到当前路径
bhost 100% 0 0.0KB/s 00:00
[root@a ~]# scp B:tmp/testhost ./ # 注:将B机器 家目录下 tmp/testhost文件cp到当前路径
#注:传输目录
[root@a ~]# scp -r adir B: # 注:将A机器当前路径下 adir文件夹 cp到B机器家目录下
[root@a ~]# scp -r adir B:bdir # 注:复制文件夹并改名
[root@a ~]# scp -r adir B:bdir/ # 注:和上面的没有区别
示例10:sftp传输文件 (前提ssh可以连接)
#注:ftp文件传输
#注:sftp 传输文件 本地和异地传输文件
#注:格式 sftp 用户名@主机名
[sanchuang@a ~]$ sftp B
Connected to B.
sftp> ls # 注:显示远程目录列表
2q aa adir bb bdir testdir testdir2 testhost
sftp> get bdir
Fetching /home/sanchuang/bdir/ to bdir
Cannot download non-regular file: /home/sanchuang/bdir/
sftp> mget bdir
Fetching /home/sanchuang/bdir/ to bdir
Cannot download non-regular file: /home/sanchuang/bdir/
sftp> get 2q # 注:get 远程路径 下载文件
Fetching /home/sanchuang/2q to 2q
/home/sanchuang/2q 100% 226 107.5KB/s 00:00
sftp> exit
示例11:pssh pscp命令 (前提ssh可以连接)
#批量处理
pssh
-h 指定主机文件列表,内容格式”[user@]host[:Port]”
-i 指定每个服务器的处理信息
[root@a ~]# yum install pssh -y # 注:没有的话需要安装epel源
[root@a ~]# cat ip.txt
192.168.0.31:2233
192.168.0.54:22
[root@a ~]# pssh -h ip.txt -i "/usr/sbin/ip a"
[1] 17:18:13 [FAILURE] 192.168.0.54:22 Exited with error code 255、
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
…… # 注:需要保证ssh能不能过去
[2] 17:18:13 [SUCCESS] 192.168.0.31:2233 # 注:返回SUCCESS表示执行成功
……
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
……
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen
……
#-------------------------------------------------------------------------------------------
#ip.txt里面可以这样写
[root@a ~]# vim ip.txt
sanchuang@192.168.0.31:2233
sanchuang@192.168.0.54:2233
示例12:pscp.pssh 批量传输文件 (前提ssh可以连接)
[root@a ~]# pscp.pssh -h ip.txt pscptest /tmp
# 注:把当前目录下的pscptest文件传送到目标主机的/tmp目录下
[root@a ~]# vim ip.txt
sanchuang@192.168.0.31:2233
sanchuang@192.168.0.54:2233
[root@a ~]# pscp.pssh -h ip.txt pscptest /tmp
[1] 17:41:31 [FAILURE] sanchuang@192.168.0.54:2233 Exited with error code 1
[2] 17:41:31 [SUCCESS] sanchuang@192.168.0.31:2233
示例13:fping
#注:批量ping 使用fping命令
[root@a ~]# yum install fping -y
[root@a ~]# fping -g 192.168.0.1/24 # 注:-g 根据网段去ping
192.168.0.1 is alive
……
192.168.0.254 is unreachable
[root@a ~]# fping -f ip.txt # 注:-f根据文件指定ip去ping
192.168.0.31 is alive
192.168.0.54 is alive
[root@a ~]# vim ip.txt
192.168.0.31
192.168.0.54