自从买了Macbook之后一直在学习Unix命令行,目的之一是为了更熟练地玩Liunx系统。虽然Mac OS X和Linux都是基于Unix,但是Mac OS X在各种设定上还是和主流Linux有很大区别,所以最终还是在Parallels里面安装了Ret Hat旗下的Fedora(因为它和RHEL有很多共通的地方)。既然要学命令行式的操作方式,那默认启动的X对我来说就是徒占系统资源而已,毫无意义,所以想到直接在Mac OS X的Terminal里SSH连接到Fedora虚拟机,这样一来能够节省系统资源,二来不用在虚拟机和本机之间切换,省去很多麻烦,三来可以让自己习惯命令行的操作方式,一举多得。
Parallels虚拟机的默认网络设定是Shared Networking,在这种模式下,主机和虚拟机之间能够通过虚拟网络互相通信,虚拟机也能通过主机连接互联网,所以其实在本机不需要任何设定就可以连接到虚拟机。事实上,我们通过ifconfig命令就会发现,Parallels在本地建立了两个虚拟网卡,vnic0和vnic1,前者用于Shared Networking,后者用于Host-Only模式。
所以要实现SSH连接到Linux虚拟机,只需要在Linux下做一些设定即可。
Linux一般有0-6一共7种启动级别,默认为5,即图形界面模式,可以通过编辑/etc/inittab文件的方式更改。这个文件事实上也只有最后一行有效,其他全是注释。
#我把Root用户的命令提示符全部更换成了美元符号,不然命令会被错误地识别为注释了。
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 |
[root@Mac /]$ vi /etc/inittab # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/rc.conf # # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # # For information on how to write upstart event handlers, or how # upstart works, see init(5), init(8), and initctl(8). # # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: |
编辑保存之后,下次重启就会启动到文本界面了。
Fedora下SSH服务默认是停止的,所以我们需要手动开启。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#查看sshd服务的状态 [root@mac /]$ service sshd status openssh-daemon is stopped #开启sshd服务 [root@mac /]$ service sshd start Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ] #再确认一下状态,running状态说明启动成功 [root@mac /]$ service sshd status openssh-daemon (pid 2027) is running... |
每次手动开启就太麻烦了,所以可以将SSH服务设置为开机自启动
1 2 3 4 5 6 |
#通过chkconfig命令来设定开机自启动,默认为在2-5这4个启动级别上自动启动 [root@Mac /]$ chkconfig sshd on #确认设定成功 [root@Mac eric]$ chkconfig | grep sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
Fedora的防火墙在手动配置之前是拒绝ssh连接的,所以即便是开启了ssh服务,我从本地连接也会提示Connection Refused。
1 2 3 |
#IP地址可以在虚拟机里通过ifconfig命令获取 ericzhuの Macbook :~ $ ssh root@10.211.55.8 ssh: connect to host 10.211.55.8 port 22: Connection refused |
解决办法有两个:
最省心的办法,本来这个防火墙也没有太大作用。方法和处理SSH服务的类似。
1 2 3 4 5 6 7 8 |
[root@Mac eric]$ service iptables stop iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] [root@Mac eric]$ chkconfig iptables off [root@Mac eric]$ chkconfig | grep iptables iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off |
如果觉得禁用防火墙太暴力,可以配置一下防火墙设定,让它允许ssh连接。Fedora提供了一个图形配置界面system-config-firewall,在文本模式下直接输入system-config-firewall即可进入配置界面,进入Custom选项之后,在Trust Services列表里勾选SSH,然后应用即可。
当然,system-config-firewall也仅仅是一个用来向/etc/sysconfig/iptables写入数据的工具,我们可以直接修改iptables文件,手动加入防火墙规则,然后重启iptables服务即可。
第10行就是允许SSH连接的规则(SSH默认端口22)。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT |
保存之后,重启防火墙服务
1 2 3 4 5 6 |
[root@Mac eric]$ service iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ] [root@Mac eric]# |
这样一切配置妥当之后,在终端里就能ssh登陆到Linux虚拟机了。为了以后方便,我在.bashrc里写入一笔别名:
1 |
alias fedora='ssh root@虚拟机IP地址' |
以后启动虚拟机之后,直接输入fedora然后输入密码即可登入。
Parallels还支持Bridge Networking(网络桥接),采用这种模式的时候,虚拟机可以模拟成本地网络中的机器,和本机平行。我在家使用无线路由器,所以虚拟机的IP就会变成192.168.0.X,这种方式也许比Shared Networking更加直观。
和Ubuntu不同,Fedora(Red Hat系的Linux应该都这样)默认启用了root账号,而在安装过程中新建的用户账号是没有sudo权限的,也就是说,如果要执行某些系统管理命令,必须切换到root,而不能使用sudo,这和我以前在Ubuntu下养成的习惯不同。
可以通过visudo命令将自己的账户加入到sudoer。
Fedora 15也即将推出了,好像是要加入到 GNOME 3,很牛掰的样子。
From:http://www.digglife.cn/articles/ssh-access-to-parallel-linux-virtual-machie-with-terminal.html