Archive for category linux
ssh public key登录错误一例
今天遇到个怪事,我用rsync了一次服务器文件之后发现我居然不能够用public key登录了。我什么配置也木有修改啊!
看了ssh登录的verbose输出:
debug2: key: /home/user/.ssh/id_rsa (0x2158ae20)
debug2: key: /home/user/.ssh/id_dsa ((nil))
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/user/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
说明已经发送了publickey。实在想不出有什么原因,一顿google,说是authorized_key 和 .ssh 文件夹的权限问题。我没改过权限啊。而且ls -l后发现权限也是正确的。
突然想到可以看服务器的log嘛。于是
tail -f /var/log/auth.log
然后用ssh登录,发现 Authentication refused: bad ownership or modes for directory /home/user
居然是该用户的home文件夹权限被改掉了!改回来就ok了。
PS:说来说去这种明明陪好了public key 却又不能用public key登录的问题大致都能从文件(夹)权限方面找找问题。。。这次连home文件夹都被改了权限实在是完全没想到。说起来也好避免啊。都是我用root用户搞得。。。
刷新dns缓存
windows上我知道刷新(清除)dns缓存是用
ipconfig /flushdns
命令。
于是我猜测linux应该有清理dns缓存的命令才是正理。凭猜测在命令行上用tab自动补全找了几个命令都不是,google之才知道都是重启init.d中的服务做到的:
/etc/init.d/nscd restart
不过在ubuntu 10.10又有不同,命令是:
/etc/init.d/dns-clean restart
grub启动ubuntu失败
今天我的ubuntu 10.10又一次不能正常启动了。
grub报的错误是 mount root filesystem 失败。
我知道它是没能加载根分区,我猜测是根分区的uuid变了。可是很奇怪,我没有改动过文件系统,怀疑是硬盘快要不行了。
解决方案:
1、使用ubuntu光盘启动到live desktop。
2、把根分区mount出来,假设sda3是根分区。
mount /dev/sda3 /media
3、重装 grub
grub-install --root-directory=/media /dev/sda
有一种情况是安装ubuntu的时候单独分了一个boot分区,最简单的解决方案是把boot分区删了,然后用上面的方法来。至于保留单独的boot分区。等我遇到我才知道怎么办 = =。哈哈
参考:https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows
使用privoxy+ssh按需代理
前文ssh端口代理介绍如何ssh建立socks代理。
如果只是使用socks代理的话你所有的互联网访问都会通过socks代理,假设你的服务器在国外,那么你对国内网站的访问就会变得很慢。因为要通过国外服务器中转,其实可能访问国内网站也不见的会快,毕竟需要通过服务器中转数据了。所以最好的解决方案是只有需要代理的网站才通过代理访问。
Firefox上有一款插件,foxy proxy可以做到让特定的网站通过代理访问。
最早的时候我只用firefox,foxy proxy也就够用了。后来chrome在我桌面上开始和firefox并驾齐驱之后,foxy proxy这款只能在firefox上使用的“按需代理软件”就变得不怎么够用了。我也没想在chrome上再找一款这样的插件了。因为这样的话就需要在两个浏览器上单独设置两遍,这个是让人难以接受。然后我就找到了privoxy这款代理软件了。
privoxy不是简单的代理而已,它还可以通过你的配置来过滤http数据,比如去掉广告之类、重定向。而在本文中我要用到的就是用它控制重定向特定url通过指定的代理服务器,也就是“按需代理”。
如何安装就不赘述了,privoxy不管在linux和windows上都有相应的安装包。privoxy在这两种系统上的配置文件都是通用的。所以以下的配置在L和W系统上都可以使用,当然配置文件的位置不同。
在ubuntu上安装完privoxy之后可以打开 /etc/privoxy/config这个配置文件。
listen-address:这是privoxy监听的ip和端口,我一般会把ip改成0.0.0.0这是为了让其他计算机也可以使用本机做代理。
actionsfile:这里指定了好几个不同的配置文件,我之使用user.action这个配置文件。
打开/etc/privoxy/user.action这个文件。这个文件里面已经预先为我们设置了很多过滤条件。由于只是用它做“按需代理”的伙计,所以原来的配置都不去改动它。直接到最后一行加上如下配置:
{+forward-override{forward-socks4a 127.0.0.1:9120 .}}
.google.com
上面这个配置就是说所有对google.com这个域名的访问全部通过 127.0.0.1:9120这个socks代理访问。
127.0.0.1:9210 根据自己的实际情况修改。
对于你需要通过代理访问的网站你只需要在.google.com之后增加即可。
ssh端口代理
刚想写一篇blog关于如何用privoxy与ssh反向代理实做一个个人按需翻墙代理服务器。然后发现“非我”(blog)上没有关于ssh反向代理的文章。想起来这还是在很早以前在blogbus发表的,后来被和谐了。偷个懒修改一下重发出来作为今天的blog。
安全访问隧道。
例子1:ssh -f -N -L 12345:localhost:80 root@192.168.100.140
说明:ssh -f -N -L <本地端口>:<本地IP>:<服务器端口> <服务器地址>
-f 指明该ssh跑后台
-N 指明该ssh连接不需要执行命令
-L 是用来绑定本地端口到服务器的端口。
这条命令执行后,就是把本地的12345端口绑定到了192.168.100.140这台服务器的80端口。
也就所有访问本地12345端口的网络数据都会转发到192.168.100.140的80端口,假设140服务器的80端口有网站在跑,那么当我访问127.0.0.1:12345的时候就会打开192.168.100.140的网站。
由于ssh隧道是加密的,那么所有从你本机到140服务器80端口的数据都不怕会被别人截获数据进行分析了。
例子2:ssh -f -N -R 12345:localhost:80 root@192.168.100.140
说明:ssh -f -N -R <服务器端口>:<本地IP>:<本地端口> <服务器地址>
-R 是用来绑定服务器端口到本地端口
这次正好相反,我如果使用浏览器访问192.168.100.140:12345的话就会访问到我本机的80端口,如果本地有web服务的话就可以打开网站了。
使用这个加密访问在其次,更多的是一般通过服务器是很难访问到我内网的计算机的,而如此一绑定,我就可以通过服务器来访问我内网的计算机了。
前段时间我用这种方法使用android上的一款远程通知软件, android notifier。让他可以通过internet通知本机的桌面程序。
SOCKS代理。
例子:ssh -f -N -D 12345 root@192.168.100.140
说明:ssh -f -N -D <本地端口> <服务器地址>
-D 建立一个本地的动态应用层协议的端口转发。
这个的作用是也就是所有到本机12345端口的网络包都通过140服务器转发,服务器就变作了你的SOCKS代理服务器。
通俗的说也就是你在浏览器里面把127.0.0.1:12345做为SOCKS代理之后就可以通过服务器来上网了。如果你的服务器在国外的话,你就能够上一些原本不能上的网站了。如果你们公司只允许访问特定网站的话,这一手也绝对管用。
默认的ssh SOCKS代理是不支持socks4a(dns解析也通过服务器)的,想要使用socks4a可以参见 openssh-client 支持socks4a代理。
vsftpd不能chroot的问题的问题
前两天在公司的服务器上配了一个ftp服务器,用的是vsftpd。
今天同事和我说不能创建目录也不能上传文件。
表现为使用mkdir提示:
550 Create directory operation failed.
使用put提示:
553 Could not create file.
登上去一看,果然如此。只有ls命令还能用,于是ls一下,看看有什么文件、目录之类没有,发现没有任何文件存在嘛,于是ssh远程登录上去创建一个文件夹,但是在ftp客户端中ls还是没有显示出来。据此猜测应该是ftp服务器没有改变到用户目录去。
在google上搜索之,找到一个vsftpd的配置说明。http://vsftpd.beasts.org/vsftpd_conf.html
有此段:
chroot_local_user
If set to YES, local users will be (by default) placed in a chroot() jail in their home directory after login. Warning: This option has security implications, especially if the users have upload permission, or shell access. Only enable if you know what you are doing. Note that these security implications are not vsftpd specific. They apply to all FTP daemons which offer to put local users in chroot() jails.
Default: NO
配上之后重启服务器,登录,提示 vsftpd 500 OOPS: chroot
在google之找到http://www.linuxquestions.org/questions/linux-networking-3/ftp-500-oops-cannot-change-directory-432558/
于是知道是selinux的问题,它有一个叫做”Allow ftp to read/write in the user home directories” 的选项。使用如下命令
/usr/sbin/setsebool -P ftp_home_dir 1
打开选项,重启服务器,登录,一切ok了。
感谢google,感谢…你懂的。
新浪微博使用curl
SINAUSER=username
SINAPASS=password
SINACOOKIE=/path/store/sina/cookie
curl -d "service=miniblog&entry=miniblog&username=${SINAUSER}&password=${SINAPASS}&url=http://t.sina.com.cn/ajaxlogin.php" "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.0)" -e "http://t.sina.com.cn/" -c ${SINACOOKIE} -s >> /dev/null
curl -d "content=${STATUS}&pic=&from=myprofile" "http://t.sina.com.cn/mblog/publish.php" -e "http://t.sina.com.cn/jinuljt" -b ${SINACOOKIE}
默认google dns 服务器
Local DNS Cache for Faster Browsing
推荐上文。说的是在本机建立一个dns缓存机制,每次dns请求先尝试找找本机的缓存。不过对于个人计算机而言有意义有多大?不管他,反正我装了。不过我关心的不再此处,而是以下。
通过编辑 /etc/dhcp3/dhclient.conf 增加
prepend domain-name-servers 8.8.8.8;
prepend domain-name-servers 8.8.4.4;
两个配置项使得每次dhcp之后都会默认增加google 的两个dns服务器。
安了ubuntu 9.10后遇到的问题
emacs 23 切换输入法不能。设置 LC_CTYPE=”zh_CN.UTF-8″
未装中文语言包,还是不行。。。
x模式的话使用emacs自带的输入法。console模式可以使用输入法。
xterm中alt键不能作为meta。 在~/.Xdefaults 加入 XTerm*VT100.metaSendsEscape: true
freemind的中文显示问题。字体问题,修改freemind字体为WenQuanYi Zen Hei。
linux通过Blackberry上网
我的设备:blackberry 8700
我的运营商:中国移动
文件一:/etc/ppp/peers/cmwap
connect "/usr/sbin/chat -f /etc/chatscripts/cmwap.chat"
noauth
user ""
password ""
defaultroute
usepeerdns
noipdefault
nodetach
novj
nodeflate
nobsdcomp
noaccomp
nocrtscts
nomultilink
nopcomp
nomagic
passive
ipcp-restart 7
ipcp-accept-local
ipcp-accept-remote
lcp-echo-interval 0
lcp-echo-failure 999
mtu 1492
debug
pty "/usr/sbin/pppob"
文件二:/etc/chatscripts/cmwap.chat
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED ABORT ERROR
OK 'AT+CGDCONT=1,"IP","cmwap"'
OK 'ATDT*99#'
命令:sudo pppd call cmwap
ps:显然将/etc/chatscripts/cmwap.chat文件中的cmwap改为cmnet,就可以上cmnet了。
pps:显然文件名与 call 的文件名是相关的,随便改。





Recent Comments