东东东 陈煜东的博客

分类存档: Linux ( 1 / 2)

rinetd – Linux tcp port forward

在寻找一个 Linux 的TCP 端口转发程序,大部分都是使用 iptables 来使用的,但我觉得 iptables 不是很好用,主要是不熟悉他的命令。

上网找了一个程序 rinetd,写个配置文件,可以后台运行,很简单。

下载地址:https://centos.pkgs.org/6/nux-misc-x86_64/rinetd-0.62-9.el6.nux.x86_64.rpm.html

教程 https://www.boutell.com/rinetd/

配置很简单vim /etc/rinetd.conf

# config rules


# 设置允许的请求来源
# allow 206.125.69.*

# 配置端口转发信息
# bindaddress bindport connectaddress connectport
0.0.0.0 23 206.125.69.81 23

service rinetd restart 重启一下服务。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: rinetd – Linux tcp port forward – https://www.chenyudong.com/archives/rinetd-linux-tcp-port-forward.html

分类: Linux 软件

ssh密钥登录失败

搞一个ssh的密钥登录,结果发现就是无法使用密钥登录,非让我输入密码。苦恼。

输入ssh连接代码

ssh -i private.key -v user@host.com -p22

从连接的信息中看不出有什么问题。

debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: private.key
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: password

已经提示说了,使用公钥登录,并且提供了私钥,但是还是提示让我输入密码。

但是我使用另外一个帐号去登录,发现是ok的,可以登录成功。我把成功的那个authorized_keys复制到我的那个用户名下,发现还是不能登录。但是验证了服务器的sshd功能是正常运行的,否则另外一个账户就没办法登录了。我觉得两个用户名的所在的环境应该是相同了,但是确实无法登录。

想到了客户端这里的连接没有更多有效的信息,那就想到了去服务器上看看相关的信息。vim /var/log/secure查看一下日志。发现有这么一段话:

Authentication refused: bad ownership or modes for directory /home/user/.ssh

上网搜了一下这个问题,发现原来是.ssh的目录权限不对,设置一下正确的权限:

chmod 700 ~/.ssh

在此过程中还学习到了一个sshd的测试模式。

 /usr/sbin/sshd -p 10022 -d
      -d     以调试模式运行。服务器将在前台运行并发送非常详细的调试日志信息,
             服务器将只允许接入一个连接,并且不派生出子进程。仅用于调试目的。
             使用多个 -d 选项可以输出更详细的调试信息(最多3个)。

会开启一个sshd的调试模式,新建一个10022端口,在客户端连接这个端口的时候,服务器端会有debug日志输出在屏幕上,这个时候就可以查看详细的信息。然后再针对信息进行解决。

总结

服务器用户对于ssh目录权限有一些权限要求,权限不对的话ssh无法工作,建议以下权限作为最小的权限。

chmod 700 .ssh          # chmod 755 .ssh 也是可以的
chmod 600 .ssh/authorized_keys
chmod 400 .ssh/private.key  #把密钥的权限也设置为最小

终于又可以愉快的编程了。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: ssh密钥登录失败 – https://www.chenyudong.com/archives/ssh-public-key-authentication-refused.html

分类: Linux

wget下载http/https代理设置

如果你的Linux机器是在内网的,需要下载一个文件,在没办法直接访问外网的情况下就需要使用代理了。如果你需要搭建HTTP代理服务器,那么参考Squid搭建正向代理

使用wget命令可以设置http代理

wget http://www.baidu.com/ -e use_proxy=yes -e http_proxy=yourproxy.com:port

下载https的文件就要其他的额外参数了。

wget --no-check-certificate https://www.google.com/   \
 -e use_proxy=yes -e https_proxy=yourproxy.com:port   ##使用https_proxy才可以哟

参数--no-check-certificate可以不检查服务器的证书。

如果你觉得麻烦,可以对shell进行http proxy的代理设置:

export http_porxy=yourproxy.com:port
export https_proxy=yourproxy.com:port

这样其他的程序就可以通过这个代理进行网络访问了。

如果wget不需要代理可以使用参数--no-proxy取消代理。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: wget下载http/https代理设置 – https://www.chenyudong.com/archives/wget-http-proxy-setting.html

分类: Linux 软件

Linux ntpdate同步网络时间

自己的Linux服务器的时间和PC机上的时间不太对,打log的时间对不上,不太方便调式信息的判断,因此需要同步一下Linux服务器的时间和自己Windows的时间,两者一致,才方便调式的查看呢。

同步网络时间

在Linux下,我们可以使用ntpdate进行网络时间的同步,而不是我们自己去设置时间。这个命令的使用很简单,

ntpdate  0.cn.pool.ntp.org

另外网络时间同步和时区是不一样的。你可以选择任何一台网络时间同步服务器来同步你的时间,只要你的时区设置是对的,那么你的Linux上的时间就是对的。因为全球都是基于一个标准时间来约定的,美国人民与我们不同的是时区不同,经过换算,我们和他们的标准时间是一样的。

定时的同步时间

我们可以使用crontab来定时的同步时间

vim /etc/crontab
10 5 * * * root (/usr/sbin/ntpdate 0.cn.pool.ntp.org && /sbin/hwclock -w) &> /var/log/ntpdate.log 

每天的5点10分crontab运行一次命令,自动同步时间。

如果你具有多台的服务器,不要使用这个方法来定时的同步的你服务器,请使用ntpd来进行,这个还可以校准始终的问题。详情查看鸟哥

使用ntpdata造成的时间的越变还可能引发因某些依赖连续时间的程序的问题。一般第一次使用ntpdate,接下来使用ntpd服务来不断的调整时间。参见http://blog.sina.com.cn/s/blog_3f3422fd0100f06c.html

如何设置时区

将时区设置为东8区的时间,虽然服务器在全球的不同地方,但是我们人在中国,看着中国的时间比较有感觉。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
# Mon Mar 31 11:02:55 CST 2014

另外如果使用date命令查看时间,发现刚刚好相差8个小时或者其他的小时,那么应该就是你的时区设置不对,快快修改一下吧。

网络时间同步服务器列表

全球那么多的网络时间同步器,那么使用哪个好呢。我们知道数据在网络上流动是由延迟的,因此我们选择离我们服务器越近的服务器进行同步,时间越准。

时间服务器分为两种,一种是一级时间服务器,另外一种是二级时间服务器。我们如果是同步自己的服务器的时间,那么选择二级时间服务器,因为一级时间服务器是为二级时间服务器提供时间校对服务器,我们尽量不要增加一级服务器的压力。这种层级的概念和DNS的层级概念是一致的。

一级时间服务器列表:http://support.ntp.org/bin/view/Servers/StratumOneTimeServers

二级时间服务器列表:http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers

附二级服务器列表:

  • 0.pool.ntp.org  有域名负载均衡
  • 0.cn.pool.ntp.org  有域名负载均衡
  • ntp.tuna.tsinghua.edu.cn 清华大学
  • time.windows.com    微软

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Linux ntpdate同步网络时间 – https://www.chenyudong.com/archives/linux-ntpdate-time-synchronize.html

分类: Linux

使用bash shell脚本编写简易的看门狗watch dog

发现有个定时上报的脚本,突然挂了,导致数据收集不到。查看了下,居然是数据库获得锁失败了。

单个脚本那边运行,肯定有风险存在,不知道之前的人怎么都没有注意到这个问题。为了解决这个问题,中午编写了一个看门狗的shell脚本,让其每隔固定的时间检查一下进程,如果没有发现进程就拉起来。否则就休眠一段时间。

看门狗shell脚本的编写

#!/bin/bash
now=`date '+%Y-%m-%d %H:%M:%S'`

grepFlag='grepDataReport'
thisLog='/data/report/watchlog'

baseDir="/data/report"
sleepTime=60

if [ ! -f "$baseDir/run.sh" ]; then
    echo "$baseDir/run.sh missing, check again" > "$thisLog"
    exit
fi

#user=`whoami`
user="root"
if [ "$user" != "root" ]; then
    echo "this tool must run as *root*"
    exit
fi

while [ 0 -lt 1 ]
do
    now=`date '+%Y-%m-%d %H:%M:%S'`
    ret=`ps aux | grep "$grepFlag" | grep -v grep | wc -l`
    if [ $ret -eq 0 ]; then
        cd $baseDir
        echo "$now process not exists ,restart process now... " > "$thisLog"
        ./run.sh
        echo "$now restart done ..... "  > "$thisLog"
        cd $curDir
    else
        echo "$now process exists , sleep $sleepTime seconds " > "$thisLog"
    fi
    sleep $sleepTime
done

在写这个脚本的时候,遇到了一些问题,主要是很久没有编写shell脚本了,有些忘记了。

在声明变量的时候 grepFlag = 'DataReport',提醒说命令不存在,原来是多了空格,生命变量必须紧邻=号才行。

多次启动一个程序。之前是因为变量没取到,获取不到进程。在if [ $ret -eq 0 ]里发现0,一直拉起进程,后来变换一下if分支的内容。使用判断如果进程查不到,就启动,如果启动多个,没有做处理。

在使用输出重定向的时候,我从 >> 改用为 > 。因为我觉得每次echo出来的文字都追加到一个文件里去,时间一长,这个文件会很大。于是我就直接改成覆盖,看最后一个消息是什么即可判断,还有查看文件的时间戳判断一下进程的情况。

后台运行程序run.sh的编写

后台的程序

nohup /usr/local/php/bin/php run.php grepDataReport &

注意这里一定要使用nohup。之前没有使用nohup,当终端没有关闭的时候,我kill了这个程序,会自动拉起,但是我退出终端,重新打开一个终端去kill后,发现无法拉起进程了。

注意使用nohup启动的时候,可能需要按一下按键,

nohup与&的区别

nohup是让命令忽略SIGHUP命令而已,退出终端后可以继续运行;&则让命令在后台运行,至于该命令是否能在退出终端后继续执行则要看进程是否是守护进程,如果不是,则需要nohup来帮忙。

nohup命令及其输出文件nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( nohang up)。

该命令的一般形式为:nohup command &使用nohup命令提交作业如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:nohup command > myout.file 2>&1 &在上面的例子中,输出被重定向到myout.file文件中。

PS.粗略看一下,发现shell脚本和python脚本感觉有些像,不用封号结尾,直接使用变量。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 使用bash shell脚本编写简易的看门狗watch dog – https://www.chenyudong.com/archives/bash-shell-watch-dog-auto-restart-process.html

分类: Linux

Linux永久改变hostname

Linux的hostname有时候有些作用,比如在shell中显示用户名@主机名

临时改变hostname

[root@localhost ~]# hostname # show current hostname
localhost.localdomain

[root@localhost ~]# hostname domain # change hostname
[root@localhost ~]# hostname
domain

永久改变hostname

[root@localhost ~]# vi /etc/hostname    # change
domain
[root@localhost ~]# exit

重新登录

[root@domain ~]# hostname
domain

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Linux永久改变hostname – https://www.chenyudong.com/archives/permanently-change-hostname-on-fedora-linux.html

分类: Linux

使用git同步管理自己的网站

在本地修改网站的文件,如果需要使用ftp上传,太麻烦,如果文件一多,也不知道哪个文件应该上传。而且网站使用了git作为项目管理,每个人都可以对网站进行更改,我如果改了,对方也改了,就不容易区分了。所以git的项目管理是很容易看出来哪里的文件发生变化的。

前面有说到使用通过SSH创建私有git仓库文章,此处在服务器上创建了一个公共的仓库,里面只是存放着文件的更改记录,没有一个文件结构直接显示在服务器的文件夹中。我们可以看本地的文件树,一个project里有.git文件夹,里面存放着更改记录。然后还有我们的具体的project的源代码。但是git服务器只存放着.git里的内容,没有本地的源代码结构。所以没办法直接更新网页。

但是有个方法,既然我们的git历史记录在服务器上保存着,而且我们可以从git仓库中check out出来源代码到服务器上,这样我们在本地push,然后在服务器上使用check out,就可以改变网页的文件了。

具体步骤。

在服务器上配置

第一步,新建一个git私有仓库test.git。可以参考文章http://www.chenyudong.com/archives/git-over-ssh-create-private-repository.html。

$ mkdir /home/www.chenyudong.com/www.chenyudong.com.git #将来网站git的记录存放位置
$ chown -R git:git www.chenyudong.com.git #改权限
$ cd www.chenyudong.com.git
$ git init --bare
Initialized empty Git repository in /home/www.chenyudong.com/www.chenyudong.com.git/

第二步,当客户端push到服务器来时,自动更新某个文件夹。

$ mkdir /home/www.chenyudong.com/WebRoot #网站的目录地址
$ vi hooks/post-receive #新建文件,输入以下内容
#!/bin/sh
GIT_WORK_TREE=/home/www.chenyudong.com/WebRoot git checkout -f
# or GIT_WORK_TREE=../WebRoot git checkout -f
$ chmod +x hooks/post-receive #添加可执行权限

post-receive这个脚本在提交文件到git仓库时,会运行文件内的代码,所以通过这样的方法,我们在客户端push提交代码后,就能自动更新网站的文件了。

在本地客户端配置

第一步,参考上边的文章,新建一个本地的仓库。

第二步,commit文件。

第三步,push文件到服务器上。在远端地址写入ssh://git@ca.daoiqi.com/~/www.chenyudong.com.git,然后输入密码,push后,就可以发现服务器下的那个文件夹发生变化了。

这样的方法,适用于php等解释性的语言,在运行时,直接靠解释器来编译运行。如果你是编写jsp页面,那么你提交的只有java文件和jsp文件,而运行的时class文件,那么就需要将java文件编译成class文件。只有在git服务器上,提交代码后,自动编译成class文件才行。我觉得可以使用ant来编译、胡或者写个bash程序。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 使用git同步管理自己的网站 – https://www.chenyudong.com/archives/git-sync-manage-website.html

分类: Linux

eclipse使用egit提交到github上

第一步,在系统上安装git,配置环境变量。下载一个Git for Windows的msysgit,我们下载一个PortableGit,我是64bit系统,我下载的PortableGit-1.8.0-preview20121022.7z,没出现什么问题。这个东西免安装,解压缩到目录下就好了。然后添加一下环境变量。

第二步,生成一个ssh 的公钥和私钥。教程可以查看https://help.github.com/articles/generating-ssh-keys#platform-windows。经过这个步骤后,产生id_rsa(私钥)和id_rsa.pub(公钥)。已经能和github通信了。

第三步,在github创建一个自己的Repository源仓库。

第四步,安装egit。

第五步,新建或者用已存在的project。右键project->team>commit,在本地创建一个仓库,并提交到本地。

第六步,提交到github。因为上一步已经在本地创建好一个仓库了,我们只要提交到github上就行。右键project->team->remote->push。在新窗口中,填写git@github.com:daoiqi/repo.git,其他默认就行了,点击Next,因为第一次提交,选择branch提交。

提交到github

这样,在github上就能看到这个project了。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: eclipse使用egit提交到github上 – https://www.chenyudong.com/archives/egit-push-git-to-github-on-eclipse.html

分类: Linux

Linux tar zip命令解压缩文件使用

tar压缩

tar压缩目录

tar -zcvf dir.tar.gz dir/
-z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
-x 从档案文件中释放文件。
-v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
-f 使用档案文件或设备,这个选项通常是必选的。

将dir目录压缩成一个文件为dir.tar.gz

tar排除特定目录

tar --exclude=dir/images/*  -zcvf dir.tar.gz dir/*

将dir目录下文件打包成dir.tar.gz,但不包括images目录下的文件。也就是打包dir/ 下的,dir/images/不要。

tar解压缩目录

tar -zxvf shell.tar.gz

tar 命令参数

-c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。
-f 使用档案文件或设备,这个选项通常是必选的。
-r 把要存档的文件追加到档案文件的末尾。例如用户已经做好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。
-t 列出档案文件的内容,查看已经备份了哪些文件。
-u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。
-x 从档案文件中释放文件。

zip解压缩

unzip aaa.zip

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: Linux tar zip命令解压缩文件使用 – https://www.chenyudong.com/archives/linux-compress.html

分类: Linux

通过SSH创建私有git仓库

开源的代码能找到第三方的git仓库存放代码,但是私有的代码却不能放在那上面。而且对于免费私有的git仓库来说,还是比较不方便的。

有了自己的Linux服务器,那么就可以自己创建一个私有的git仓库了。接下来,就讲讲如何创建自己的私有的git仓库。

在Linux服务器上

第一步,先创建一个专门由于git仓库的一个账号吧,这样也方便进行管理。可以参考这篇文章Linux新建用户的命令

#新建一个git用户组
sudo groupadd git

#新建一个git用户,创建目录,并禁止shell登录,添加到git用户组
sudo useradd git -m -s /sbin/nologin -d /home/git -g git 

第二步,新建一个git仓库,这个仓库叫“git bare repository”,git裸仓库。

$ mkdir repo.git
$ chown -R git:git repo.git #改权限
$ cd repo.git
$ git --bare init
Initialized empty Git repository in /home/ams/repo.git/

这个仓库和本地的那个不一样,可以发现本地的那个仓库有在project下有一个.git的目录,而project下还有自己的代码。但是这个git裸仓库它没有自己的project,他只有和本地.git目录下一样的内容。

在客户端下

使用TortoiseGit图形界面,使用portable git内核。

第一步,右键目录,选择git 克隆,然后如图设置

git clone 仓库

第二步,在确定后,会出来一个密码提示框,让输入密码。

第三步,就等待下载结束,这样本地就能有一个本地仓库了。

总结:这样一个最简单简易的git私有仓库就建好了,本地可以继续向服务器提交代码,但是也需要密码才能。

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: 通过SSH创建私有git仓库 – https://www.chenyudong.com/archives/git-over-ssh-create-private-repository.html

分类: Linux

较早的文章

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑