远程ssh安装lfs
时间:2007-06-22 来源:hkcat2006
最近上课越来越无聊了,不想看着时间浪费,所以就有了下面这个任务了
目标: 在机房通过ssh登陆到本机进行LFS安装
需要解决的问题:
1.用什么做为lfs的宿主环境
2.ssh服务器的架设及相关的安全问题
3.因为是局域网,所以还要进行端口映射
4.动态IP怎么解决
步骤:
1)
因为主系统不太适合做lfs.所以直接用lfslivecd了,这里用6.2的
按照linuxsir上的文章把lfslivecd拷贝到硬盘,
详细命令在下面(参考linuxsir上的帖子)
http://www.linuxsir.org/bbs/showthread.php?t=295213&highlight=chroot+livecd
下面是帖子的步骤:
mkdir /mnt/isolfs
mount -o loop lfslivecd-x86-6.2-5.iso /mnt/isolfs
mkdir /mnt/lfslivecd
export WORK=/mnt/lfslivecd
cp /mnt/isolfs/root.ext2 $WORK/root.ext2
mkdir $WORK/root
其中下面几步是需要每次chroot前都要执行的,做成个脚本
emacs -nw cht.sh
#!/bin/bash
export WORK=/mnt/lfslivecd
mount -o loop /mnt/lfslivecd/root.ext2 $WORK/root
mount -t proc proc $WORK/root/proc
mount -t sysfs sysfs $WORK/root/sys
mount -t devpts devpts $WORK/root/dev/pts
mount -t tmpfs tmpfs $WORK/root/dev/shm
mount --bind /dev $WORK/root/dev
chroot /mnt/lfslivecd/root
将cht.sh拷贝到/usr/bin
cp cht.sh /usr/bin/cht.sh
因为我们登陆以后用的用户是mklfs,这个用户没有权限进行mount的操作,所以我们要
sudoedit /etc/sudoers在里面添加一行
mklfs ALL=/usr/bin/cht.sh, /sbin/shutdown -h now
就是让mklfs用户可以执行cht.sh的权限,注意一定不能让mklfs用户可以编辑cht.sh
所以还需要chmod 755 /usr/bin/cht.sh
因为机房里可以下载lfs的资料,所以mklfs用户只需要能运行上面的脚本就行了,本地的文件读取的权限可以不给他.总之,这个用户的权限要尽量的少。
2)
安装ssh服务器,因为当前系统默认就安装了openssh,
现在启用一下 /sbin/service sshd start
如果你机子上还没有安装可以参考网上文章安装一下
测试是否能正常登陆 ssh 127.0.0.1,然后再用mklfs用户登陆测试一下,最好是安装一个lfs的软件包试一下有没有什么问题.
现在最好完善下ssh的安全设置,
编辑/etc/ssh/sshd-config ,添加一行
AllowUsers mklfs 只允许mklfs登陆
3)
如果通过ssh可以进行lfs的软件包安装,那么接下来我们使外网可以访问
开放本机22端口
执行system-config-securitylevel,在里面选中ssh前面的checkbox,选择应用.
这样就开放了本机的22端口了,当然也可以用iptables来完成.
现在可以试着找台局域网的机子,然后telnet 192.168.0.2 22
试下,如果出现ssh的版本号,表明本机的iptable没问题了 ,注意你在本地机上telnet上22并不代表从其它机子上也可以登陆(我当时就在这里卡住了)
4)
设置路由器的端口转发,使外网可以访问
根据你的防火墙设置端口映射,我这里的是speedtouch.
speedtouch设置端口转发,可以通过80来设置,在高级设置napt那里
内部IP和内部端口就是10.0.0.2和22也就是你要开放的端口
外部IP可以设置为0.0.0.0,外部端口就是你登陆时使用的端口,我这保持默认22
下面设置speedtouch的防火墙规则(如果你没动过speedtouch的防火墙,也可以不设置,因为speedtouch默认的防火墙规则不会拦截你,由于我这边设置了,所以speedtouch上还要开放)
telnet 10.0.0.138
输入用户名和密码
下面输入
:firewall rule create chain=sink index=0 prot=tcp dstport=22 action=accept log=yes
:firewall rule create chain=source index=0 prot=tcp srcport=22 action=accept log=yes
:firewall rule create chain=forward index=0 srcintfgrp=lan prot=tcp dstport=22 action=accept log=yes
:firewall rule create chain=forward index=1 srcintfgrp=wan prot=tcp
srcport=22 action=accept log=yes
上面的log=yes,也可以不用,具体规则的释义可以参见博客上另一篇讲解speedtouch防火墙的文章,目前还没写:-)
这里有个问题,nmap 扫描外网IP时22总是显示filtered的,但是从远程IP登陆时却是可以的,谁知道告诉我下,谢谢
5)
动态IP的问题
网上搜索了下,找到了下面的一个简单的解决方案
在http://www.comexe.cn注册一个免费的域名
注册好后会提供类似下面的信息
域名:
mklfs.kmip.net
A记录:
127.0.0.1
IP类型:
公网
域名解析费:
免费
有效期:
永久
下面是用户名和密码:
mklfs
123456789
2.下载一个客户端,这个客户端就是更新IP的
注意这里的版本,我们下linux版的
下载好后再解压得到文件pipclient
可以将文件拷贝到/usr/bin下面
运行 pipclient输入
[mklfs@HKCAT kmip]# pipclient
Usage: pipclient -h -c -w /home/pipclient
-h: help message.
-c: do configuration.
-w <dir>: set work directory.
Do configuration now.
Input User name: #你注册的用户名 mklfs
Input Password: #你注册时的用户密码 123456789
Input Domain: #你注册得到的域名 mklfs.kmip.net
Input Offline URL or Offline IP(Enter for none): #这张是本机没开机使用的IP或者网页,回车
Has another domain?(Y/N): n #是不是还有其它域名了?
下面就是一些启动信息了,会连接到219.134.132.132
有时候会出现登陆超时的多等一下吧
直到出现
070619 231552:INFO:Connected to:219.134.132.132:9994
070619 231552:INFO:Connected to:219.134.132.132:9993
070619 231552:MESG:登录成功! 出口IP是: 219.134.33.23
070619 231552:INFO:219.134.33.23 N 20
这样就可以了,可以按C-c 结束
这里219.134.33.23就是你当前公网IP了
然后你可以nmap一下会发现mklfs.kmip.net对应的IP就是你当前公网IP了
现在这个程序最好每次都运行一下,其实就是更新下服务器的域名->ip的记录
如果需要重新配置用pipclient -c可以实现,还需要编辑crontab每隔一定时间执行一次pipclient,也可以将pipclient弄成服务.让其定时更新ip.
6)
最后机子要实现定时开机
修改下cmos,找到电源管理,找到时间唤醒,设置好开机时间
让其在指定的时间开机,如果你可以一直开机,那这步不做也没关系,
接下来修改/etc/inittab,将运行级由5改为3.再运行
/sbin/chkconfig --level 3 sshd on 在运行级3上开启ssh服务
最后,可以去其它机子上试一下了,
在windows上登陆可以用putty
主机名mklfs.kmip.net 端口22
登陆上了后执行
sudo /usr/bin/cht.sh会chroot到lfslivecd上的
7)待改进的地方:
1.因为chroot后的lfslivecd是root权限的,所以可以挂载硬盘上任何分区,那么修改下ssh使其可以用root登陆,也是可以的,解决方法是找到lfslivecd中自动登陆的部分,不让其chroot后自动登陆(还没找到这个文件,谁实现了请告诉我下),也可以限定ip,只允许学校的IP登陆