1
00:00:03,395 --> 00:00:06,790
[音乐播放]

2
00:00:10,200 --> 00:00:12,510
您好，欢迎来到 INE。

3
00:00:12,510 --> 00:00:15,300
今天，在这个视频中，我们将
看看 Netmiko Ultimate

4
00:00:15,300 --> 00:00:18,580
将
成为第 1 号挑战的挑战。

5
00:00:18,580 --> 00:00:21,720
所以，在这个视频中，
我们基本上会

6
00:00:21,720 --> 00:00:25,680
完成所有事情的全面任务


7
00:00:25,680 --> 00:00:27,802
您在
上一门课程中学到的知识。

8
00:00:27,802 --> 00:00:29,760
现在，如果你还没有
看过我之前的课程，

9
00:00:29,760 --> 00:00:32,500
你应该去看
基础课程，

10
00:00:32,500 --> 00:00:35,610
这是网络自动化使用的基础


11
00:00:35,610 --> 00:00:36,360
Python。

12
00:00:36,360 --> 00:00:39,120
完成此操作后，
您可以返回此视频

13
00:00:39,120 --> 00:00:41,050
并尝试解决这个问题。

14
00:00:41,050 --> 00:00:42,930
所以我
放这个视频的原因是

15
00:00:42,930 --> 00:00:47,250
因为我希望您有一个
快速预览或快速回顾

16
00:00:47,250 --> 00:00:49,750
我们在该课程中
学到的所有东西。

17
00:00:49,750 --> 00:00:52,440
所以在这里，我们将进行一个
全面的挑战

18
00:00:52,440 --> 00:00:56,040
我们基本上会
连接到路由器

19
00:00:56,040 --> 00:00:58,120
并执行某种任务。

20
00:00:58,120 --> 00:01:00,550
那么我们来看看
题的要求。

21
00:01:00,550 --> 00:01:03,130
所以这里说，创建
一个名为的 Python 脚本

22
00:01:03,130 --> 00:01:08,340
作为 netmiko_challenge1.py
在 /home/rack102

23
00:01:08,340 --> 00:01:12,750
Ubuntu 机器的 ubuntu/Desktop/rohit 目录
。

24
00:01:12,750 --> 00:01:15,270
现在，又是这个机架
编号，文件夹

25
00:01:15,270 --> 00:01:17,550
可能会根据您的机架号更改


26
00:01:17,550 --> 00:01:20,910
或者如果你有你的
本地机器

27
00:01:20,910 --> 00:01:23,580
正在托管路由器
和 Ubuntu 机器，

28
00:01:23,580 --> 00:01:25,870
它应该存储在
您的本地目录中。

29
00:01:25,870 --> 00:01:28,080
所以不要真的
担心路径

30
00:01:28,080 --> 00:01:33,790
只要它在
文件夹中，它应该是好的。

31
00:01:33,790 --> 00:01:36,990
所以我们基本上需要
创建这个Python脚本

32
00:01:36,990 --> 00:01:40,080
并将脚本
存储在特定文件夹中

33
00:01:40,080 --> 00:01:42,845
并且此脚本必须
完成以下任务。

34
00:01:42,845 --> 00:01:44,220
它需要做的第一件事是

35
00:01:44,220 --> 00:01:47,340
连接到路由器，即路由器 1 和路由器 2。

36
00:01:47,340 --> 00:01:50,580
它需要保存运行
配置，所以保存你的配置，

37
00:01:50,580 --> 00:01:54,970
然后需要备份
每台路由器R1的配置

38
00:01:54,970 --> 00:01:55,470
和 R2。

39
00:01:55,470 --> 00:01:56,700
基本上，节目运行。

40
00:01:56,700 --> 00:01:58,950
我们应该进行一场演出
并获取配置

41
00:01:58,950 --> 00:02:05,880
并将其备份到名为 R1.cfg 和 R2.cfg 的文件中。

42
00:02:05,880 --> 00:02:08,729
同样，它应该存储在
Ubuntu 机器中。

43
00:02:08,729 --> 00:02:13,500
不要使用任何 For 循环或
函数或条件

44
00:02:13,500 --> 00:02:15,340
来达到这个要求。

45
00:02:15,340 --> 00:02:17,920
这就是我们今天
要做的事情。

46
00:02:17,920 --> 00:02:20,140
所以我想让你
暂停视频，

47
00:02:20,140 --> 00:02:21,528
自己尝试一下。

48
00:02:21,528 --> 00:02:23,820
如果您遇到困难，您可以
随时返回视频

49
00:02:23,820 --> 00:02:26,110
看看我是如何实现的。

50
00:02:26,110 --> 00:02:29,140
那么现在让我向您展示
我将如何做到这一点。

51
00:02:29,140 --> 00:02:33,580
所以我要回到
我的 Atom 并创建一个脚本。

52
00:02:33,580 --> 00:02:36,120
所以我要做的第一件事


53
00:02:36,120 --> 00:02:40,320
是，我会说，进口操作系统。

54
00:02:40,320 --> 00:02:42,990
所以我会导入
OS 模块并制作

55
00:02:42,990 --> 00:02:46,930
确保我的路径是所需的
文件夹。

56
00:02:46,930 --> 00:02:53,190
所以我会说 os.chdir
将会是——

57
00:02:53,190 --> 00:02:58,120
让我们去我的机器
复制路径。

58
00:02:58,120 --> 00:03:02,430
所以我要给
这条路作为我的路。

59
00:03:02,430 --> 00:03:06,210
我接下来要做的是来自netmiko，

60
00:03:06,210 --> 00:03:11,460
我将导入 ConnectHandler。

61
00:03:11,460 --> 00:03:13,840
这就是我正在做的下一个
事情。

62
00:03:13,840 --> 00:03:16,510
现在我将
连接到我的路由器。

63
00:03:16,510 --> 00:03:18,910
所以我的第一个要求
是连接路由器。

64
00:03:18,910 --> 00:03:20,910
现在，只是为了让
简单一点

65
00:03:20,910 --> 00:03:24,270
或者在视觉上看起来
不错，我可能会

66
00:03:24,270 --> 00:03:28,710
给出一个打印语句，
说，连接到路由器，

67
00:03:28,710 --> 00:03:31,120
然后，实际上
连接到路由器。

68
00:03:31,120 --> 00:03:32,160
所以我会这样做。

69
00:03:32,160 --> 00:03:33,070
这很有意义。

70
00:03:33,070 --> 00:03:33,930
否则会发生什么


71
00:03:33,930 --> 00:03:35,465
当你执行
脚本时，它是

72
00:03:35,465 --> 00:03:36,840
只是要在后端运行
，

73
00:03:36,840 --> 00:03:38,548
你不会真的
知道什么是什么

74
00:03:38,548 --> 00:03:40,270
发生在幕后。

75
00:03:40,270 --> 00:03:42,690
所以我什至想给
一个打印声明

76
00:03:42,690 --> 00:03:45,250
虽然这个问题确实
没有说什么，

77
00:03:45,250 --> 00:03:47,140
但我通常会这样做。

78
00:03:47,140 --> 00:03:51,240
所以我会做的是，我会说打印。

79
00:03:51,240 --> 00:03:58,440
所以我会打印，比如说，
连接到设备，路由器 1。

80
00:03:58,440 --> 00:04:00,840
所以我只想说一些东西
比如一个字符串

81
00:04:00,840 --> 00:04:02,790
连接到设备路由器 1。

82
00:04:02,790 --> 00:04:05,250
所以打印这个，
在我打印这个之后，

83
00:04:05,250 --> 00:04:09,540
我会说 r1 = 使用
ConnectHandler，

84
00:04:09,540 --> 00:04:19,230
所以连接处理程序
有IP =我相信它是10。

85
00:04:19,230 --> 00:04:21,760
让我，其实，回去
检查IP地址。

86
00:04:21,760 --> 00:04:23,710
我真的不记得
IP地址了。

87
00:04:23,710 --> 00:04:25,560
所以你可以做的是
检查IP地址

88
00:04:25,560 --> 00:04:27,960
在您的路由器上，
管理 IP 是什么。

89
00:04:27,960 --> 00:04:32,790
我相信管理
IP是10.8.102，

90
00:04:32,790 --> 00:04:34,545
这是一个机架号，0.100。

91
00:04:34,545 --> 00:04:35,670
事实上，让我们检查一下。

92
00:04:35,670 --> 00:04:37,770
显示 IP int 简介。

93
00:04:37,770 --> 00:04:40,050
所以10.8.102.100，到
就是IP地址，

94
00:04:40,050 --> 00:04:42,090
路由器1的管理IP
地址。

95
00:04:42,090 --> 00:04:46,060
所以我会回去
说，让我们把这个。

96
00:04:46,060 --> 00:04:47,860
所以这是我的IP地址。

97
00:04:47,860 --> 00:04:50,490
接下来，我会输入用户名。

98
00:04:50,490 --> 00:04:54,810
用户名将是 cisco。

99
00:04:54,810 --> 00:04:57,580
然后，我会得到密码。

100
00:04:57,580 --> 00:05:02,370
密码将
等于cisco。

101
00:05:02,370 --> 00:05:05,060
然后，我会有
我的秘密密码，

102
00:05:05,060 --> 00:05:08,680
也就是说，再次等于 cisco。

103
00:05:08,680 --> 00:05:13,490
最后，我会
拥有我的 device_type，

104
00:05:13,490 --> 00:05:18,880
这将
等于cisco_xe。

105
00:05:18,880 --> 00:05:21,932
这就是我的设备类型
因为我使用的是 CSR 路由器。

106
00:05:21,932 --> 00:05:23,890
因此，如果您正在使用，让我们
比方说 iOS，那么您

107
00:05:23,890 --> 00:05:27,070
会说 cisco_ios。

108
00:05:27,070 --> 00:05:28,960
所以基本上，它会
打印出来

109
00:05:28,960 --> 00:05:31,090
连接到
设备R1，然后

110
00:05:31,090 --> 00:05:33,670
它实际上使
连接。

111
00:05:33,670 --> 00:05:37,900
连接后我要做的下一件事


112
00:05:37,900 --> 00:05:42,577
我应该启用，因为，
再次，我们需要进行写入。

113
00:05:42,577 --> 00:05:44,410
因此，如果您查看
要求，它会说，

114
00:05:44,410 --> 00:05:47,180
连接后，我们需要
保存配置，对吗？

115
00:05:47,180 --> 00:05:48,950
这就是 write mem 命令。

116
00:05:48,950 --> 00:05:51,580
所以我会说，r1.enable。

117
00:05:51,580 --> 00:05:56,740
所以我要对路由器做一个
启用。

118
00:05:56,740 --> 00:05:59,680
接下来我
要做的就是发送一个命令。

119
00:05:59,680 --> 00:06:01,220
再一次，我会做一个打印。

120
00:06:01,220 --> 00:06:02,680
所以让我们再打印一次。

121
00:06:02,680 --> 00:06:10,630
所以打印，保存
配置。

122
00:06:10,630 --> 00:06:13,390
同样，您实际上并不需要
提供打印声明。

123
00:06:13,390 --> 00:06:16,060
问题没有说
，但我喜欢这样做。

124
00:06:16,060 --> 00:06:19,400
它只是告诉我当前处于哪个
步骤。

125
00:06:19,400 --> 00:06:22,090
所以我要打印
保存配置，

126
00:06:22,090 --> 00:06:24,490
然后我实际上会保存
正在运行的配置

127
00:06:24,490 --> 00:06:28,430
用
r1.send_command 来完成，

128
00:06:28,430 --> 00:06:33,340
所以我要发送一个命令
这将是 wr mem。

129
00:06:33,340 --> 00:06:35,930
所以我将这个
命令发送到路由器。

130
00:06:35,930 --> 00:06:39,310
所以是 r1.send_command,
括号，

131
00:06:39,310 --> 00:06:44,200
在括号内，我
会给 wr mem 或只是 wr。

132
00:06:44,200 --> 00:06:48,850
一旦我完成了这些，接下来我要做的
事情就是——

133
00:06:48,850 --> 00:06:51,400
下一个要求是
备份配置

134
00:06:51,400 --> 00:06:53,030
进入那个文件夹。

135
00:06:53,030 --> 00:06:55,360
所以要备份，
首先，我会打印

136
00:06:55,360 --> 00:06:58,690
说，备份配置。

137
00:06:58,690 --> 00:07:00,280
那么我们需要备份什么呢？

138
00:07:00,280 --> 00:07:01,133
节目开播。

139
00:07:01,133 --> 00:07:02,800
现在，如果您知道，
当您进行表演时

140
00:07:02,800 --> 00:07:05,110
在 Cisco 路由器上，
发生的第一件事

141
00:07:05,110 --> 00:07:09,930
当我们执行 show
run 时，我们必须输入——

142
00:07:09,930 --> 00:07:12,850
我们必须做更多，这意味着
我们必须按空格键。

143
00:07:12,850 --> 00:07:15,460
所以我将
终端长度设置为0，

144
00:07:15,460 --> 00:07:20,230
然后我会做一个表演。

145
00:07:20,230 --> 00:07:26,500
所以让我们做一些类似终端长度 0 的事情。

146
00:07:26,500 --> 00:07:31,840
所以我会说，r1。

147
00:07:31,840 --> 00:07:32,485
让我们再做一次。

148
00:07:35,450 --> 00:07:37,645
所以让我们再做一个打印
语句，所以打印。

149
00:07:40,270 --> 00:07:49,540
支持配置
到文件到 R1.cfg。

150
00:07:49,540 --> 00:07:50,960
假设这是一个文件名。

151
00:07:50,960 --> 00:07:52,490
所以我要打印那个。

152
00:07:52,490 --> 00:07:56,410
然后我会
说r1.send_command。

153
00:07:56,410 --> 00:08:02,200
我要发送
终端长度为0。

154
00:08:02,200 --> 00:08:03,550
所以我会发送这个。

155
00:08:03,550 --> 00:08:09,010
然后我会
发送 r1.send_command。

156
00:08:09,010 --> 00:08:12,470
我会发送
show run 命令。

157
00:08:12,470 --> 00:08:17,890
但是，我真的不想
只发送该命令。

158
00:08:17,890 --> 00:08:20,290
我想要演出的输出


159
00:08:20,290 --> 00:08:22,730
存储在某处
变量中，

160
00:08:22,730 --> 00:08:25,000
这样我就可以调用
那个变量并存储

161
00:08:25,000 --> 00:08:28,570
变量，
那个变量的输出到一个文件中。

162
00:08:28,570 --> 00:08:33,460
现在，如果你还记得的话，我们可以
使用 with 语句来做到这一点

163
00:08:33,460 --> 00:08:36,789
或者我们可以直接
写入文件。

164
00:08:36,789 --> 00:08:38,830
这真的取决于你
你想如何做到这一点。

165
00:08:38,830 --> 00:08:40,760
我将使用 with 语句执行此操作。

166
00:08:40,760 --> 00:08:43,030
那么首先
我要做什么，让我们

167
00:08:43,030 --> 00:08:45,460
把节目运行
放在里面，我

168
00:08:45,460 --> 00:08:47,090
将其存储在一个变量中。

169
00:08:47,090 --> 00:08:53,980
所以让我们把它说成是
r1_config 是我的变量名 =

170
00:08:53,980 --> 00:08:56,620
r1.send_command 显示运行。

171
00:08:56,620 --> 00:08:58,780
所以发送这个命令
和任何输出

172
00:08:58,780 --> 00:09:02,470
放在 r1_config 中。

173
00:09:02,470 --> 00:09:04,180
接下来
我要做的事

174
00:09:04,180 --> 00:09:07,250
是我会做一个 with 声明。

175
00:09:07,250 --> 00:09:11,120
那么使用 open 以及我们要打开什么
文件？

176
00:09:11,120 --> 00:09:12,250
我们想打开——

177
00:09:12,250 --> 00:09:16,270
我相信
要求是R1.cfg。

178
00:09:16,270 --> 00:09:18,700
所以我会说 open
R1.cfg 是

179
00:09:18,700 --> 00:09:21,710
具有
写权限的空白文件，

180
00:09:21,710 --> 00:09:24,160
所以写权限。

181
00:09:24,160 --> 00:09:30,490
有任何写权限——

182
00:09:30,490 --> 00:09:33,040
像占位符，
临时占位符名称，

183
00:09:33,040 --> 00:09:34,630
比方说，作为临时。

184
00:09:34,630 --> 00:09:37,300
所以打开这个作为临时。

185
00:09:37,300 --> 00:09:41,740
而在这——事实上，让我先保存这个文件。

186
00:09:41,740 --> 00:09:45,130
让我们将此
保存为需求

187
00:09:45,130 --> 00:09:46,780
netmiko_challenge1.py。

188
00:09:51,900 --> 00:09:54,410
所以让我们保存这个。

189
00:09:54,410 --> 00:09:58,570
所以在这里我会说打开，
打开一个名为 r1.cfg 的空白文件

190
00:09:58,570 --> 00:10:01,360
具有写权限的
临时占位符称为

191
00:10:01,360 --> 00:10:01,930
温度。

192
00:10:01,930 --> 00:10:09,960
在这里我会说 temp.write，
所以 temp.write，写入--

193
00:10:09,960 --> 00:10:11,020
从哪里写？

194
00:10:11,020 --> 00:10:17,380
从这个变量名中，
就是r1_config。

195
00:10:17,380 --> 00:10:22,600
所以 temp.write，r1_config。

196
00:10:22,600 --> 00:10:25,150
所以无论里面是什么
这个输出，不管是什么

197
00:10:25,150 --> 00:10:28,120
在那个变量里面，
如果你还记得的话，

198
00:10:28,120 --> 00:10:29,470
变量包含什么？

199
00:10:29,470 --> 00:10:30,640
它包含一个节目运行。

200
00:10:30,640 --> 00:10:33,010
所以无论 show run 的输出是什么，

201
00:10:33,010 --> 00:10:36,310
它存储在
r1_config 和那个输出中

202
00:10:36,310 --> 00:10:40,360
将被写入
到 R1.config 中。

203
00:10:40,360 --> 00:10:43,780
一旦完成，
我们需要做的就是

204
00:10:43,780 --> 00:10:47,410
就是，我们不需要关闭
文件，因为如果你还记得的话，

205
00:10:47,410 --> 00:10:49,810
with 语句自动关闭
文件。

206
00:10:49,810 --> 00:10:56,950
所以我现在要做的就是做 r1.disconnect

207
00:10:56,950 --> 00:11:00,550
断开我的会话。

208
00:11:00,550 --> 00:11:02,180
这应该足够了。

209
00:11:02,180 --> 00:11:05,630
所以，事实上，让我们来命名它。

210
00:11:05,630 --> 00:11:12,040
所以我要做的是，
让我们把它作为 R1，

211
00:11:12,040 --> 00:11:20,840
我们将这里复制
这个作为R2

212
00:11:20,840 --> 00:11:22,710
并做同样的事情。

213
00:11:22,710 --> 00:11:24,920
这将是打印
到 R2，而这

214
00:11:24,920 --> 00:11:26,670
将是 R2 的 IP 地址。

215
00:11:26,670 --> 00:11:30,450
让我们去 R2 并检查
它的 IP 地址，即

216
00:11:30,450 --> 00:11:34,750
我相信是 10.8.102.103。

217
00:11:34,750 --> 00:11:38,610
所以让我们检查一下
而不是仅仅猜测。

218
00:11:38,610 --> 00:11:39,990
就是那个IP地址。

219
00:11:39,990 --> 00:11:45,570
让我们将它
更改为 10.8.102.103。

220
00:11:45,570 --> 00:11:47,080
其他一切
保持不变。

221
00:11:47,080 --> 00:11:52,470
这将是 r2，这将是 r2，这将是 r2。

222
00:11:52,470 --> 00:12:03,297
打印配置、R2、r2.send、
r2_config、r2、r2 和

223
00:12:03,297 --> 00:12:06,080
r2 和 r2.disconnect。

224
00:12:06,080 --> 00:12:06,950
就是这样。

225
00:12:06,950 --> 00:12:07,580
就这样。

226
00:12:07,580 --> 00:12:09,830
那应该是我的整个剧本。

227
00:12:09,830 --> 00:12:12,830
事实上，让我们保存它。

228
00:12:12,830 --> 00:12:17,755
我们将把这个
文件复制到我的机器上。

229
00:12:17,755 --> 00:12:19,880
所以从我的本地机器上，
我会传输文件

230
00:12:19,880 --> 00:12:23,280
到 Ubuntu 机器，以便我们
可以执行 Python 脚本。

231
00:12:23,280 --> 00:12:28,550
所以让我们做 pwd cd
Desktop, cd rohit,

232
00:12:28,550 --> 00:12:33,125
并对我的
Ubuntu 机器执行 sftp。

233
00:12:36,450 --> 00:12:44,535
密码是 cisco，让我们
放 netmiko_challenge1.py。

234
00:12:48,700 --> 00:12:54,620
把它放在
将成为这个文件夹的文件夹中，

235
00:12:54,620 --> 00:12:59,250
所以把它放在这个
文件夹中，然后按Enter。

236
00:12:59,250 --> 00:13:02,490
所以一旦我这样做了，现在，如果我
回到我的 Ubuntu 机器

237
00:13:02,490 --> 00:13:08,040
然后执行 ls，我应该会看到
netmiko_challenge1.py。

238
00:13:08,040 --> 00:13:10,870
我确实有一些 r1.config，我只是要删除它。

239
00:13:10,870 --> 00:13:16,140
所以 rm, remove, r1.config,
然后删除 r2.config。

240
00:13:16,140 --> 00:13:18,570
所以基本上，我没有
配置文件

241
00:13:18,570 --> 00:13:21,010
现在在我的文件夹里。

242
00:13:21,010 --> 00:13:25,660
所以让我们尝试
执行这个脚本。

243
00:13:25,660 --> 00:13:35,790
所以我会做 python3
netmiko_challenge1.py。

244
00:13:35,790 --> 00:13:37,270
所以我会执行这个。

245
00:13:37,270 --> 00:13:39,660
所以它说，
正在连接到设备。

246
00:13:39,660 --> 00:13:42,940
我拼写了connecting
错误，但你明白了。

247
00:13:42,940 --> 00:13:45,930
所以现在，它完成了连接，
它保存了配置，

248
00:13:45,930 --> 00:13:47,400
它备份了配置。

249
00:13:47,400 --> 00:13:50,790
现在，它正在连接路由器
2，保存配置，

250
00:13:50,790 --> 00:13:54,030
将配置
备份到R2.cfg，就完成了。

251
00:13:54,030 --> 00:13:58,860
所以现在，如果我执行 ls，我应该
找到 R1.cfg 和 R2.cfg。

252
00:13:58,860 --> 00:14:02,850
假设我
做 cat R1.config，

253
00:14:02,850 --> 00:14:06,960
你会看到我的路由器，我的路由器 1 的运行配置
。

254
00:14:06,960 --> 00:14:10,830
我已经备份了整个运行
配置。

255
00:14:10,830 --> 00:14:15,410
至此，我们完成了
我们的任务要求。

256
00:14:15,410 --> 00:14:19,450
所以你看，这
做任务真的很容易

257
00:14:19,450 --> 00:14:22,540
或者基本上
连接到路由器，

258
00:14:22,540 --> 00:14:26,710
执行命令，并
备份您的配置。

259
00:14:26,710 --> 00:14:30,370
所以有了这个 netmiko_challenge1，
我们成功了

260
00:14:30,370 --> 00:14:31,300
实现了这一点。

261
00:14:31,300 --> 00:14:33,650
我希望此视频
对您有所帮助，

