首先介紹下怎么設置靜態(tài)IP
2018年4月26日趣苏,ubuntu 18.04發(fā)行,第一時間下載安裝了SERVER版本梯轻。使用VM14版本的虛擬機食磕,開始使用DHCP獲得IP地址,沒有意外喳挑,可以直接上網(wǎng)彬伦。然而在更改VM的網(wǎng)絡模式為橋接模式時滔悉,想把虛擬機設為固定IP時,出現(xiàn)故障单绑,一直不能獲得地址回官,也上不了網(wǎng)。經(jīng)常無數(shù)次測試搂橙,有以下經(jīng)驗可供參考歉提。
ubuntu從17.10開始,已放棄在/etc/network/interfaces里固定IP的配置区转,即使配置也不會生效苔巨,而是改成netplan方式 ,配置寫在/etc/netplan/01-netcfg.yaml或者類似名稱的yaml文件里废离,18.04的server版本安裝好以后侄泽,配置文件是:/etc/netplan/50-cloud-init.yaml,修改配置以后不用重啟蜻韭,執(zhí)行 netplan apply 命令可以讓配置直接生效悼尾。以前的重啟網(wǎng)絡服務命令/etc/init.d/networking restart或者services network restrart也都會提示為無效命令。
sudo vi /etc/netplan/01-network-manager-all.yaml肖方,配置文件可按如下內(nèi)容修改闺魏。
network:
version: 2
renderer: networkd
ethernets:
ens33: #配置的網(wǎng)卡名稱
dhcp4: no #dhcp4關閉
dhcp6: no #dhcp6關閉
addresses: [192.168.1.55/24] #設置本機IP及掩碼
gateway4: 192.168.1.254 #設置網(wǎng)關
nameservers:
addresses: [114.114.114.114, 8.8.8.8] #設置DNS
這里簡單介紹下 [192.168.1.55/24] ,里的192.168.1.55就是設置的靜態(tài)IP窥妇,IP地址后面跟/24表示掩碼位是24位舷胜,子網(wǎng)掩碼是255.255.255.0的IP地址,其主機位最多有254個活翩。
注意點:
1.以上配置文件共11行烹骨,其中第2,3材泄,6沮焕,7四行可以不寫,測試過沒有這四行拉宗,網(wǎng)絡也能工作正常峦树,第5行的ens33為虛擬網(wǎng)卡,可以使用ifconfig -a查看本機的網(wǎng)卡旦事。
2.配置文件里在冒號:號出現(xiàn)的后面一定要空一格魁巩,不空格則在運行netplan apply時提示出錯。
3.關鍵之關鍵是看清配置總共分為五個層次姐浮,逐層向后至少空一格谷遂,
第一層-network:
第二層-- ethernets:
第三層--- ens33:
第四層----addresses: [192.168.1.55/24]
第四層----gateway4: 192.168.1.254
第四層----nameservers:
第五層-----addresses: [114.114.114.114, 8.8.8.8]
出現(xiàn)類似錯誤:line8 column 6:cloud not find expected ':' #提示是冒號:后面沒加空格
出現(xiàn)類似錯誤:netplan found character that cannot start any token,#提示是沒有按五個層次寫配置文檔卖鲤,一定要下一層比上一層多空一格或以上肾扰。
啟用生效
sudo netplan apply
到這里就可以設置靜態(tài)IP了畴嘶,接下來結合ssh,sftp實現(xiàn)遠程修改
直接上代碼
def updateIP(self):
try:
IP = self.lineEdit_50.text()
name = self.lineEdit_51.text()
if IP == '' or name == '':
QMessageBox.warning(self, "警告", "請正確輸入修改的IP集晚!")
return
self.createFilr(IP,name)
hostname = self.lineEdit.text()
username = '****'
password = '****'
rootdir = '01-network-manager-all.yaml'
dir_path = '/etc/netplan/'
scp = paramiko.Transport((hostname, 22))
scp.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(scp)
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 第一次登錄的認證信息
# 連接服務器
ssh.connect(hostname=hostname, port=22, username=username, password=password)
#修改配置文件權限窗悯,777是最高權限
command = "chmod 777 /etc/netplan/ -R"
stdin, stdout, stderr = ssh.exec_command('echo %s|sudo -S %s' % (password, command))
res, err = stdout.read(), stderr.read()
result = res if res else err
sftp.put(rootdir,dir_path+rootdir)
#啟用生效
command = "netplan apply"
stdin, stdout, stderr = ssh.exec_command('echo %s|sudo -S %s' % (password, command))
res, err = stdout.read(), stderr.read()
result = res if res else err
scp.close()
ssh.close()
QMessageBox.warning(self, "提示", "修改成功!")
return 0
except:
QMessageBox.warning(self, "警告", "修改失斖蛋巍蒋院!")
#創(chuàng)建網(wǎng)絡配置文件
def createFilr(self,IP,name):
file = open('01-network-manager-all.yaml', 'wb')
str_f = '# Let NetworkManager manage all devices on this system\n' + 'network:\n' + ' version: 2\n' + ' # renderer: NetworkManager\n' \
+ ' ethernets:\n' + ' '+ name +':\n' \
+ ' addresses: [' + IP + '/24]\n'
b_f = str.encode(str_f)
file.write(b_f)
file.close()
這里結合了pyqt,創(chuàng)建一個窗口工具条摸,更方便的通過遠程去修改IP