Hello World

Just So So ...

VirtualBox的提供了四种网络接入模式,它们分别是:

1、NAT 网络地址转换模式(NAT,Network Address Translation)
2、Bridged Adapter 桥接模式
3、Internal 内部网络模式
4、Host-only Adapter 主机模式

第一种 NAT模式

解释:
NAT模式是最简单的实现虚拟机上网的方式,你可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在。
虚拟机与主机关系:
只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。
虚拟机与网络中其他主机的关系:
只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。
虚拟机与虚拟机之间的关系:
相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。
IP:10.0.2.15
网关:10.0.2.2
DNS:10.0.2.3
一台虚拟机的多个网卡可以被设定使用 NAT, 第一个网卡连接了到专用网 10.0.2.0,第二个网卡连接到专用网络 10.0.3.0,等等。默认得到的客户端ip(IP Address)是10.0.2.15,网关(Gateway)是10.0.2.2,域名服务器(DNS)是10.0.2.3,可以手动参考这个进行修改。
NAT方案优缺点:
笔记本已插网线时: 虚拟机可以访问主机,虚拟机可以访问互联网,在做了端口映射后(最后有说明),主机可以访问虚拟机上的服务(如数据库)。
笔记本没插网线时: 主机的“本地连接”有红叉的,虚拟机可以访问主机,虚拟机不可以访问互联网,在做了端口映射后,主机可以访问虚拟机上的服务(如数据库)。

第二种 Bridged Adapter模式

解释:
网桥模式是我最喜欢的用的一种模式,同时,模拟度也是相当完美。你可以这样理解,它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。
虚拟机与主机关系:
可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机于网络中其他主机关系:
可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机于虚拟机关系:
可以相互访问,原因同上。
IP:一般是DHCP分配的,与主机的“本地连接”的IP 是同一网段的。虚拟机就能与主机互相通信。
笔记本已插网线时:(若网络中有DHCP服务器)主机与虚拟机会通过DHCP分别得到一个IP,这两个IP在同一网段。 主机与虚拟机可以ping通,虚拟机可以上互联网。
笔记本没插网线时:主机与虚拟机不能通信。主机的“本地连接”有红叉,就不能手工指定IP。虚拟机也不能通过DHCP得到IP地址,手工指定IP后,也无法与主机通信,因为主机无IP。
这时主机的VirtualBox Host-Only Network 网卡是有ip的,192.168.56.1。虚拟机就算手工指定了IP 192.168.56.*,也ping不能主机。

第三种 Internal模式

解释:
内网模式,顾名思义就是内部网络模式,虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。
虚拟机与主机关系:
不能相互访问,彼此不属于同一个网络,无法相互访问。
虚拟机与网络中其他主机关系:
不能相互访问,理由同上。
虚拟机与虚拟机关系:
可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。
IP: VirtualBox的DHCP服务器会为它分配IP ,一般得到的是192.168.56.101,因为是从101起分的,也可手工指定192.168.56.*。
笔记本已插网线时:虚拟机可以与主机的VirtualBox Host-Only Network 网卡通信
这种方案不受主机本地连接(网卡)是否有红叉的影响。

第四种 Host-only Adapter模式

解释:
主机模式,这是一种比较复杂的模式,需要有比较扎实的网络基础知识才能玩转。可以说前面几种模式所实现的功能,在这种模式下,通过虚拟机及网卡的设置都可以被实现。
我们可以理解为Vbox在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,我们可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。
虚拟机与主机关系
默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。
虚拟机与网络主机关系
默认不能相互访问,原因同上,通过设置,可以实现相互访问。
虚拟机与虚拟机关系
默认可以相互访问,都是同处于一个网段。
虚拟机访问主机 用的是主机的VirtualBox Host-Only Network网卡的IP:192.168.56.1 ,不管主机“本地连接”有无红叉,永远通。
主机访问虚拟机,用是的虚拟机的网卡3的IP: 192.168.56.101 ,不管主机“本地连接”有无红叉,永远通。
虚拟机访问互联网,用的是自己的网卡2, 这时主机要能通过“本地连接”有线上网,(无线网卡不行)

通过对以上几种网络模式的了解,我们就可以灵活运用,模拟组建出我们所想要的任何一种网络环境了。
比如我想模拟出来一个一台主机,监控一个局域网上网情况的网络环境。
首先我开启了两台虚拟机vhost1与vhost2,当然如果硬件允许,我同样可以再增加vhost3、vhost4…
所有的vhost我都设置成internat内网模式,网络名称为intnal,网关为192.168.56.100,意思就是通过 192.168.56.100网卡上网。其中有一台vhost1我设置为双网卡,一张为内网模式(192.168.56.100),一张为网桥模式(192.168.1.101)。两张网卡设置双网卡共享上网
虚拟机之间为局域网,其中有一台虚拟机vhost1通过与外网相连,所有局域网中的虚拟机又通过vhost1来实现上外网。这样vhost1就可以监控整个虚拟机局域网上网情况了。

NAT 设置端口映射
http://huzhangsheng.blog.163.com/blog/static/34787784200802801435931/
你可以设置一个虚拟机的服务(比如 WEB 服务),通过使用命令行工具 VboxManage 代理。你需要知道虚拟机的服务使用哪个端口,然后决定在主机上使用哪个端口(通常但不总是想要使虚拟机和主机使用同一个端口)。在主机上提供一个服务需要使用一个端口,你能使用在主机上没有准备用来提供服务的任何端口。一个怎样设置新的 NAT 例子,在虚拟机上连接到一个 ssh 服务器,需要下面的三个命令:
VBoxManage setextradata ‘Linux Guest’ ‘VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol’ TCP
VBoxManage setextradata ‘Linux Guest’ ‘VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort’ 22
VBoxManage setextradata ‘Linux Guest’ ‘VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort’ 2222
说明:VboxManage 是一个命令行程序,请查询你的 VirtualBox 安装目录,’Linux Guest’ 是虚拟主机名。guestssh 是一个自定义的名称,你可以任意设置,通过上面的三个命令,把虚拟机的 22 端口 转发到主机的 2222 端口。
又比如,我在虚拟机 debian 上安装了 apache2 服务器,使用 80 端口,映射到主机的 80 端口。使用下面的命令。
‘C:\Program Files\innotek VirtualBox\VBoxManage.exe’ setextradata ‘debian’ ‘VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/Protocol’ TCP
‘C:\Program Files\innotek VirtualBox\VBoxManage.exe’ setextradata ‘debian’ ‘VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/GuestPort’ 80
‘C:\Program Files\innotek VirtualBox\VBoxManage.exe’ setextradata ‘debian’ ‘VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/HostPort’ 80
注意:要使设置生效,请关掉 VirtualBox 再运行虚拟机,我把 VirtualBox 安装在 winxp 上,在虚拟机中安装 debian 4.02r ,虚拟机名是 debian ,并安装了 apache2 php5 mysql-server ,在主机上用IE浏览 http://localhost,成功转发到虚拟机 debian 的 apache2 web 服务器上

上文出处:http://www.cnblogs.com/coltiam/archive/2010/03/26/1696939.html

个人感觉通过使用端口映射的方式很不爽,还不如直接桥接来的快,现在多数情况下连接到网络是没问题的,端口映射还需要在宿主跟虚拟机都额外开某个服务,感觉不爽。

“网络”配置页面有4个方案:

1:NAT 网络地址转换(Network Address Translation)

2:Birdged Network 桥接

3:Internal Network 内部网络(可以是虚拟机与虚拟机之间)

4:Host-Only 只与主机通信(大概吧)

安装完VirtualBox2.2后,主机多了一个“VirtualBox Host-Only Network ”本地网卡。

经过两天的折腾,终于把archlinux在我的小黑上顺利安装完毕。

1
2
3
4
5
6
7
8
9
msyqldump -u root -p dbname table1 table2 > db.sql

mysql -u root -p dbname > db.sql


msyqldump -u root -p dbname table1 table2 | gzip > db.sql.gz

mysql -uroot -p'passwd' database < <(zcat database.sql.gz)

puppet 模块基础

puppet模块可以导入,复用都很方便,在这里先回答下之前的两个问题:

  1. 查看puppet 模块路径,可以使用如下命令:
puppetmasterd --configprint modulepath
1
/etc/uppet/modules:/usr/share/puppet/modules  #可以看到这两个目录是puppet 模块默认所在的目录。
  1. 要引用 puppet模块,如果模块所在上面的两个默认的路径可以使用:
    import “模块名”
    如果提示模块不存在,比如我在 /data/modules,那么有两种解决方法:
  2. 是修改puppet.conf文件,添加目录到modulepath.举例 :

modulepath = /data/modules:/etlc/puppet/modules
2. 是在引用的是时候用绝对路径。
import “/data/modules/模块名”

了解完puppet 模块基础后,接下来就为大家写个简单模块示例:

puppet 模块实例

1
2
3
root@s1:/etc/puppet/modules# cd /etc/puppet/modules
root@s1:/etc/puppet/modules# mkdir -p test/{manifests,files,templates}

这三个目录说明:files目录是用来存放同步远程客户端的文件或者文件夹,manifests目录下放.pp文件,且必须要有init.pp,templates是存放的puppet 模板文件,是以.erb结尾的。

建立init.pp文件

1
2
3
4
5
6
7
8
9
10
11
# /etc/puppet/modules/test/manifests/init.pp
class test::test {
file { "/tmp/test":
owner => root,
group => root,
ensure => present,
content => "Hello word",
mode => "0644",
}
}

在/etc/puppet/manifests/site.pp里添加:

1
2
3
4
node "default" {
include test::test
}

注:不建议这样操作,实际生产中,我会在site.pp里添加 import “nodes.pp”,然后在nodes.pp里添加上面的内容。

这样我们就建立了我们第一个puppet 模块,在到客户端 c2.inanu.net 上运行puppet查看结果:

1
2
3
4
5
6
7
8
congpeijun@s2:/tmp$ puppet agent --server s1.ubuntu.local --test
info: Caching catalog for s2.ubuntu.local
info: Applying configuration version '1339679532'
notice: /Stage[main]/Test/File[/tmp/test]/ensure: created
notice: Finished catalog run in 0.05 seconds
congpeijun@s2:/tmp$ cat test
Hello word

再次验证,可以看到已经成功运行,已经达到预期的效果。在/tmp/目录下生成了nanu这个文件,有个问题,不知道大家注意到没有,这里并没有import “test”模块,而直接使用了include test::test类。有兴趣的同学可以试试,再看下效果。

本文参考 http://www.inanu.net/post/730.html

再次吐槽下天国的网络

我的系统为Debian

安装PPTP服务器,以及 iptables

1
2
3
apt-get install ppp
apt-get install pptpd
apt-get install iptables
  1. 配置PPTP服务器
    编辑/etc/pptpd.conf
    查找如下内容:
    1
    2
    #localip 192.168.0.1
    #remoteip 192.168.0.234-238,192.168.0.245
    替换为:
    1
    2
    localip 192.168.183.1 #这里 应该 和你vps的private 的ip在一个网段。我就是这样弄的。
    remoteip 192.168.183.234-238,192.168.183.245
    上面的两行为VPN服务器的IP和VPN客户端连接后获取到的IP范围。
  2. 添加PPTP VPN用户
    编辑 /etc/ppp/chap-secrets
    文件 内容如下
1
#client        server  secret                  IP addresses

你主要按照上面的内容格式填写就行
bash echo “youname pptpd password *” >> /etc/ppp/chap-secrets```

  1. 修改DNS服务器

编辑/etc/ppp/options,添加如下内容

1
2
ms-dns 8.8.8.8
ms-dns 8.8.4.4

5.开启ipv4转发 并设定nat转发规则
编辑/etc/sysctl.conf
去掉net.ipv4.ip_forward=1前的注释

1
2
3
sysctl -p #使更改生效
# 设定nat转发规则
iptables -t nat -A POSTROUTING -s 192.168.183.1/24 -o eth0 -j MASQUERADE
  1. 重启PPTP服务

    1
    service pptpd restart
  2. 拨上VPN上出墙吧

昨天想把ubuntu内核升级后多余的旧内核删除掉,可是不小心连同当前使用的内核一起删除了。这下系统没有了内核,更新后的grub启动列表里也没有了ubuntu。问题貌似很严重。这时,最佳的解决方法应该是不关机,立刻安装新的内核。可是在那个瞬间我突然很二地想到,我要关机看看会出现什么情况。于是关机、重启,然后发现根本没有任何办法进入ubuntu。彻底傻掉。

发现网上有些人和我遇到同样的问题,有的直接不淡定地重装了系统。其实还是有温和的解决方案的。

首先进入liveCD,然后将安装介质中的vmlinuz和initrd文件拷贝到原系统中。我所使用的是kubuntu 11.10,当初是U盘安装的。所需要的文件在安装U盘的casper文件夹中,名字是vmlinuz和initrd.lz。我将两个文件拷贝到原系统的/boot中。

然后重启,进入grub的命令行。执行下面的命令引导系统

1
2
3
4
5
6
7
 set root=(hd0,msdos9)

linux /vmlinuz root=UUID=xxx ro locale=zh_CN quiet splash

initrd /initrd.lz

boot

其中(hd0,msdos9)是/boot挂载的分区,具体的序号因人而异。而xxx表示/分区的uuid,可以执行ls -l查看所有的分区及其对应的uuid。

现在可以正常进入系统了。然后安装新的内核,替换掉刚才拷贝进来的山寨版。因为从安装包拷贝进来的内核版本低,缺少部分驱动(我的声卡驱动就有问题),而且日后更新升级可能会不正常。安装内核的方法有两种,一种直接从源安装

1
2
3
apt-get install linux-headers-x.x.x-xx    #x代表版本号

apt-get install linux-image

另一种是从官网里下载内核的deb包进行安装。但是我使用这种方法安装后一直无法正常启动,可能是下载的版本不对吧,具体原因不详。

新内核安装完成后重启,系统就恢复了原样。

最后吐个槽。当初听说系统当前使用的内核是无法被删除的,删除时系统会报错。现在发现系统确实会发出警告,可是警告后内核文件照删不误,这个警告的意义未免小了点吧。

转自:http://www.mysqlops.com/2011/11/08/puppet-errors.html

【导读】
puppet在运维管理是个自动化的工具,作用非常明显,但是苦于puppet 中文资料不多,puppet学习难度
大,在puppet使用过程中,碰到很多各种奇怪的问题,这里是 sky的个人总结的一些puppet常见错误,以
及相应的解决方法,也感谢部分群友的分享:坚持创新和Ninja
以及再一年等QQ好友,也希望更多的人分享puppet知识,共同进步。
【puppet 常见错误列表】
1.Failed to retrieve current state of resource: Could not retrieve information from source(s)
err: //test/File[/tmp/sky]: Failed to retrieve current state of resource: Could not retrieve information from source(s) puppet:///test/foo at /etc/puppet/modules/test/manifests/init.pp:6
解决方法:这是一般大多人犯的问题,这个问题一般是出现在puppetmaster上,大部分是source这个路径没有写对。可以查看init.pp的第6行,
一般正确的写法是source => “puppet:///test/sky”,关于文件服务器的写法,可以参阅之前的sky的文档.
2.Could not retrieve information from environment production source(s) puppet://server.puppet.com/plugins

解决方法:这是一般都是通过yum或者apt-get安装了puppet,在puppetmaster和客户端的配置文件 里有pluginsync=true ,
把两端/etc/puppet.conf里pluginsync=true ,改成pluginsync=false,并重启puppetmaster即可解决。
再补充一种方法,如果不设置pluginsync=false,那么就需要到少要建个插件。
3.Could not request certificate: undefined method closed?’ err: Could not request certificate: undefined method closed?’ for nil:NilClass Exiting;
failed to retrieve certificate and watiforcert is disabled
解决方法:a.确保puppet的运行用户是否有权限读ssl认证文件。
b.确认防火墙是否打开8140端口。
4.Change from absent to file failed
err: //test/File[/tmp/sky/www.mysqlops.com]/ensure: change from absent to file failed: Could not set file on ensure: No such file or directory
解决方法:很明显,可能是没有/tmp/sky这个目录,如果没有,请使用 mkdir -p /tmp/sky.
5.Run of Puppet configuration client already in progress
解决方法,很明显,a.可以通过ps -axf|grep puppet是否有puppet进程在运行。如果有,则停掉puppet,再运行,即可。
b.没有进程,那有可能puppetdlock存在,则删除之,使用 rm -rf /var/puppet/state/puppetdlock
6.Change failed … Could not find server
err: //test/File[/tmp/sky]/content: change from {md5}068008008418dff20750a94336318974 to {md5}8db2d67767577c70b1251fd80ad32943 failed: Could not find server puppet
解决方法:这是设置了filebucket, 名称为puppet,但并不没有使用真名。在配置文件/etc/puppet.conf里设置如下:
filebucket {
puppetmaster: server => “www.mysqlops.com“ # server后面要用全名,即fqdn.
}
7.Could not retrieve catalog: can’t convert nil into String
err: Could not retrieve catalog: can’t convert nil into String at /etc/puppet/modules/test/manifests/init.pp:29 on node web-01.test.com
解决方法:确认模板文件是否存在。一般都是文件不存在的时候报的。
8.undefined method closed?’ for nil:NilClass err: Could not retrieve catalog from remote server: undefined method closed?’ for nil:NilClas
解决方法:经常可能是语法错误,少了双引号或者 大概号什么的。
9.certificate verify failed
err: /File[/var/lib/puppet/lib]: Failed to generate additional resources using ‘eval_generate’: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
err: /File[/var/lib/puppet/lib]: Failed to retrieve current state of resource: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed Could not retrieve file metadata for puppet://puppet.example.com/plugins: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
解决方法:这可能是换了不同的两台puppetmaster服务器引起的。解决方法,删除现有ssl证书。find /var/lib/puppet -type f -print0 |xargs -0r rm
10.Could not retrieve catalog from remote server
err: Could not retrieve catalog from remote server: No such file or directory - /var/lib/puppet/client_yaml/catalog
解决方法:明显提示,/var/lib/puppet/client_yaml/可能不存在,没有则创建之。
11.no certificate found and waitforcert is disabled
warning: peer certificate won’t be verified in this SSL session
Exiting; no certificate found and waitforcert is disabled
解决方法: 这个是需要puppetmaster端给客户端ssl签名.
a.puppetca -l #列出等待签名的客户端
b.puppetca -s hostname # hostname 是客户端主机的名字。
12.Could not intern from pson: Could not convert from pson: Could not find relationship target ”
解决方法:这是一个bug, 针对版本0.25.1.在puppet0.25.5.1版本中可以在/etc/puppet/puppet.conf里添加
preferred_serialization_format = yaml 即可解决。
13.Error 400 on SERVER: No support for http method POST
err: Could not retrieve catalog from remote server: Error 400 on SERVER: No support for http method POST
解决方法:这个问题可能是puppetmaster是2.6版本,puppet客户端版本是2.7。请记住 ,puppetmaster版本可以大于或者等于客户端的版本。
不能小于,互换下puppet角色,即可。
14.You cannot specify more than one of content, source, target
err: Could not run Puppet configuration client: You cannot specify more than one of content, source, target at /etc/puppet/modules/test/manifests/init.pp:10
解决方法:错误提示很显示,不能为一个文件指定多个来源。
15.Could not retrieve catalog from remote server: wrong header line format
解决方法,可能是模板语法错误,请使用命令检查模板语法,示例:erb -x -T ‘-’ -P test/templates/cron/cron.erb |ruby -c
16.Cannot override local resource on node
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Exported resource skyd[foo] cannot override local resource on node web-01.mysqlops.com
解决方法:这个问题,一般是在使用export 虚拟资源的时候会出现,可能是有重复的定义。
这可能是由于旧节点,运行puppet clean node。查看数据库。使用下面的sql
“select hosts.name from hosts,resources where restype=’skyd’ and title=’foo’ and hosts.id = resources.host_id;”
17.Could not render to pson: invalid utf8 byte
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not render to pson: invalid utf8 byte:
解决方法:可能是有无效的utf8字符,可以使用命令:od -c filename 进行检查。
18. 在安装dashboad的时候,报
RAILS_ENV=production db:migrate –trace
(in /usr/local/puppet-dashboard)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
rake aborted!
undefined method reenable' for <Rake::Task db:schema:dump => [environment]>:Rake::Task 解决访问,可能是gem版本不对,升级版本,请确认版本是否满足安装dashboad的要求。 19.在执行facter命令的时候报: err: Could not run Puppet configuration client: Could not retrieve local facts: execution expired 解决方法,由于ubuntu升级导致的ec2.rb有新的改动,可以修改/usr/lib/ruby/1.8/facter这个目录下面的ec2.rb文件后从新启动后解决。 具体解决方法如下:1. cd /usr/lib/ruby/1.8/facter 2. cp ec2.rb{,.date -I`} #备份新的ec2.rb这个文件
3. 从正常执行的主机复制ec2.rb这个文件进行覆盖。或者比较两个文件的不同,进行修改。
20.在使用gem 安装的时候会报:
ERROR: Could not find a valid gem ‘rake’ (>= 0) in any repository
ERROR: While executing gem … (Gem::RemoteFetcher::FetchError)
解决方法:可能是没有gem源,或者无法访问源,大部分是网络问题。
可以多添加下几个gem 源来尝试解决:
使用命令:
gem sources -a http://gems.rubyforge.org
gem sources -a http://gems.rubyonrails.org
gem sources -a http://gemcutter.org
gem sources -a http://rubygems.org
添加了上面的四个gem源,希望能解决,另外使用gem 安装的过程比较慢,需要大家耐心点等待提示。
21.err: Could not request certificate: Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key
解决方法:按照下面a-d四个步骤,即可。
a.在客户端可以删除rm -rf /var/lib/puppet/ssl/,
b.在puppetmaster端,执行 puppetca -c 客户端主机名
c. 客户端在重新生成证书请求: puppet –test –server puppetmaster主机名
d.在puppetmaster端,执行 puppetca -s 客户端主机名

原文
复制或克隆虚拟机后无 eth0 或 eth0 变eth1 ( 同理eth[x] 变 eth[x+1] )解决方法如下:

在虚拟机里直接删除掉文件 /etc/udev/rules.d/70-persistent-net.rules

先设置mysql的配置 /etc/mysql/my.cnf
找到 bind_address 修改后面的ip, 或是 注释掉本行
 解决方法:

  一、改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”

  mysql -u root -pvmwaremysql>use mysql;

  mysql>update user set host = ‘%’ where user = ‘root’;

  mysql>select host, user from user;

  二、授权法。

  msyql>GRANT ALL PRIVILEGES ON . TO ‘myuser‘@’%’ IDENTIFIED BY ‘mypassword’ WI TH GRANT OPTION;

  如果你想允许用户myuser从ip为10.0.1.5的主机连接到mysql服务器,并使用mypassword作为密码

  mysql>GRANT ALL PRIVILEGES ON . TO ‘myuser‘@’10.0.1.5’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

  mysql>FLUSH RIVILEGES

  使修改生效.就可以了

  三、授权办法

  在安装mysql的机器上运行:

  1、d:/mysql/bin/>mysql -h localhost -u root

  //这样应该可以进入MySQL服务器

  2、mysql>GRANT ALL PRIVILEGES ON . TO ‘root‘@’%’ WITH GRANT OPTION

  //赋予任何主机访问数据的权限

  3、mysql>FLUSH PRIVILEGES

  //修改生效

  4、mysql>EXIT

  //退出MySQL服务器

  这样就可以在其它任何的主机上以root身份登录啦。

  1. 首先安装ssh服务器
1
sudo apt-get install openssh-server

  然后确认sshserver是否启动了:(或用“netstat -tlp”命令)   

1
ps -e | grep ssh

  如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。

  ssh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。然后重启SSH服务:   

1
sudo /etc/init.d/ssh resart

  事实上如果没什么特别需求,到这里 OpenSSH Server 就算安装好了。但是进一步设置一下,可以让 OpenSSH 登录时间更短,并且更加安全。这一切都是通过修改 openssh 的配置文件 sshd_config 实现的。
  首先,您刚才实验远程登录的时候可能会发现,在输入完用户名后需要等很长一段时间才会提示输入密码。其实这是由于 sshd 需要反查客户端的 dns 信息导致的。我们可以通过禁用这个特性来大幅提高登录的速度。首先,打开 sshd_config 文件:   

1
sudo nano /etc/ssh/sshd_config

  找到 GSSAPI options 这一节,将下面两行注释掉:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

#GSSAPIAuthentication yes
#GSSAPIDelegateCredentials no


```然后重新启动 ssh 服务即可:

```bash

  sudo /etc/init.d/ssh restart


```  再登录试试,应该非常快了吧
  利用 PuTTy 通过证书认证登录服务器
  SSH 服务中,所有的内容都是加密传输的,安全性基本有保证。但是如果能使用证书认证的话,安全性将会更上一层楼,而且经过一定的设置,还能实现证书认证自动登录的效果。
  首先修改 sshd_config 文件,开启证书认证选项:

```bash

  RSAAuthentication yes
PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys


```修改完成后重新启动 ssh 服务。
  下一步我们需要为 SSH 用户建立私钥和公钥。首先要登录到需要建立密钥的账户下,这里注意退出 root 用户,需要的话用 su 命令切换到其它用户下。然后运行:

```bash
  ssh-keygen

  这里,我们将生成的 key 存放在默认目录下即可。建立的过程中会提示输入 passphrase,这相当于给证书加个密码,也是提高安全性的措施,这样即使证书不小心被人拷走也不怕了。当然如果这个留空的话,后面即可实现 PuTTy 通过证书认证的自动登录。
  ssh-keygen 命令会生成两个密钥,首先我们需要将公钥改名留在服务器上:   

1
cd ~/.ssh mv id_rsa.pub authorized_keys

然后将私钥 id_rsa 从服务器上复制出来,并删除掉服务器上的 id_rsa 文件。
  服务器上的设置就做完了,下面的步骤需要在客户端电脑上来做。首先,我们需要将 id_rsa 文件转化为 PuTTy 支持的格式。这里我们需要利用 PuTTyGEN 这个工具:
  点击 PuTTyGen 界面中的 Load 按钮,选择 id_rsa 文件,输入 passphrase(如果有的话),然后再点击 Save PrivateKey 按钮,这样 PuTTy 接受的私钥就做好了。
  打开 PuTTy,在 Session 中输入服务器的 IP 地址,在 Connection->SSH->Auth 下点击 Browse 按钮,选择刚才生成好的私钥。然后回到 Connection 选项,在 Auto-login username 中输入证书所属的用户名。回到 Session 选项卡,输入个名字点 Save 保存下这个 Session。点击底部的 Open 应该就可以通过证书认证登录到服务器了。如果有 passphrase 的话,登录过程中会要求输入 passphrase,否则将会直接登录到服务器上,非常的方便。

0%