SSH代理

通过ssh代理功能连接到内网linux服务器

需要通过一台公网主机代理

  1. 建立内服到云的反向代理
  2. 建立云服上的正向代理
  3. 在个人机器上通过云服ssh到内服

下面三行命令分别在内网服务器、云服务器、和个人电脑上执行。

ssh -fCNR 8081:localhost:22 云用户@云IP
ssh -fCNL "*:8082:localhost:8081" localhost
ssh -p 8082 内服用户@云IP

8081是云服上端口,用来与内服上的22端口绑定。
8082为云服上转发端口,将数据转发到8081端口。
*表示接受来自任意机器的访问。
https://segmentfault.com/a/1190000002718360

SSH 参数解释

  • -f 后台运行
  • -C 允许压缩数据
  • -N 不执行任何命令
  • -R 将端口绑定到远程服务器,反向代理
  • -L 将端口绑定到本地客户端,正向代理

sshkey免密码

ssh即secure shell,即安全shell。sshkey用来加密传输。
加密传输的算法有多种,git可使用rsa,rsa使用一对特定的数字,这两个数字就是在使用git和github的时候所遇到的public key(公钥)以及private key(私钥)。公钥就是那个用来加密的数字,在本机生成了公钥之后,要上传到github。从github发回来的,是用公钥加密过的数据,可以用本地的私钥来还原。不管是公钥还是私钥,丢失一个都不能用了,解决方法也很简单,重新再生成一次,然后在github.com里再设置一次。
方法一,密钥验证。安全、配置简单、同时ssh、scp、sftp等登录都免去了输入密码的麻烦。

查看~/.ssh下是否已经生成id_rsa.pub,如果已存在可以直接使用它,覆盖它可能会影响现有服务正常使用。
如果没有则客户端生成密匙对,最后在~/.ssh下生成id_rsa.pub公钥。
#ssh-keygen -t rsa
然后将公钥通过scp命令上传到服务器上,将本地生成的公钥拷贝到远程服务器的下并改名为authorized_keys。
#scp ~/.ssh/id_rsa.pub 用户名@服务器的ip:~/.ssh/authorized_keys

方法二,通过sshpass明文传送密码匙,安全性不高。

安装sshpass允许你用 -p 参数指定明文密码,然后直接登录远程服务器。例如:
# sudo apt-get install sshpass
sshpass允许用 -p 参数指定明文密码,然后直接登录远程服务器
# sshpass -p '密码' ssh 用户名@服务器ip

http://www.linuxidc.com/Linux/2011-02/31921.htm
http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646346.html

开机自动运行ssh命令建立反向代理

通过supervisor配置自启动,ssh服务配置示例:

[program:service2]
command=ssh -fCNR 8081:localhost:22 云用户@云IP
autorstart=true #设置随supervisor的启动而启动
directory=~ #相当于在该目录下执行程序
autorestart=true #程序停止之后是否需要重新将其启动
startsecs=10 #重新启动时,等待的时间
startretries=36 #重启程序的次数
redirect_stderr=true #是否将程序错误信息重定向的到文件
stdout_logfile=~/%(program_name)s_log.txt #将程序输出重定向到该文件
stderr_logfile=~/%(program_name)s_err.txt #将程序错误信息重定向到该文件
numprocs = 2
numprocs_start = 8850
user = #系统用户名
process_name = 163gs-%(process_num)s

如果日志中报ssh “permissions are too open” error
.ssh/id_rsa 不要设置为777权限,Chmod 400 即可。

自动ssh登录脚本

#!/usr/bin/expect
set timeout 10
spawn ssh root@ip
expect {
    "*yes/no*" {
        send "yes\n";
        exp_continue;
    }
    "*password:*" {
        send "密码\r";
        exp_continue;
    }
}
interact

Ubuntu

http://cn.ubuntu.com/

切换桌面
启动到登录界面时,可以ctrl+alt+F1…7,切换桌面

解压tgz
tar -zxvf xxxx.tgz

terminal中出现菱形乱码修改方法

vim /var/lib/locales/supported.d/local
里面有这行内容
en_US.UTF-8 UTF-8

sudo vim /etc/default/locale 修改为
LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”

重启动

安装boost

# apt-cache search boost
# apt-get install libboost-dev

安装最新的版本
到https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.bz2/download下载
https://jaist.dl.sourceforge.net/project/boost/boost/1.63.0/boost_1_63_0.tar.bz2

# tar --bzip2 -xvf boost_1_63_0.tar.bz2
# cd boost_1_63_0
# ./bootstrap.sh  可以看到在当前目录下生成了安装工具bjam和b2
# ./bjam  编译时间比较长
# ./bjam install 安装完毕后的头文件默认是在/usr/local/include目录下,.a和.so在/usr/local/lib目录下。

http://blog.csdn.net/chinawangfei/article/details/50351371
http://blog.csdn.net/sinat_23857245/article/details/45225147
http://blog.csdn.net/yhrun/article/details/8099630

nginx的安装目录

sudo apt-get install nginx
完成后的安装目录在 /etc/nginx, nginx命令文件位置在 /etc/init.d/中
nginx -v #nginx version: nginx/1.4.6 (Ubuntu)
可能新的安装版本位置在/usr/local/nginx,mac上版本是 nginx version: nginx/1.10.2

查看版本
cat /etc/issue

Linux命令

wget是一种下载软件类似与迅雷 如果要下载一个软件 我们可以直接: wget 下载地址
apt-get是ubuntu下的一个软件安装方式,它是基于debain。
yum是redhat、centos下的一个软件安装方式,它是基于Linux的。
aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。

安装命令

一般来说著名的linux系统基本上分两大类:

1.社区组织维护的发行版本 Debian系列:Debian、Ubuntu等
apt-get:Advanced Packaging Tool,apt是Debian Linux发行版中的APT软件包管理工具。所有基于Debian的发行都使用这个包管理系统。deb包可以把一个应用的文件包在一起,类似Windows上的安装文件。

一般可以通过使用ppa/源方式或下载两种方式安装软件。
Ubuntu 安装 JDK 7 / JDK8 的两种方式
http://www.cnblogs.com/a2211009/p/4265225.html
如果在ubuntu上报 add-apt-repository: command not found,先安装python。
sudo apt-get install python-software-properties
sudo apt-get install software-properties-common
//移除
sudo apt-get remove xxx

2.商业公司维护的发行版本 RedHat系列:Redhat、Centos、Fedora等
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
简单点说, rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题。

查看资源信息
yum info supervisor

修改网络

服务器地址设置为static,不使用dhcp
ifconfig
sudo vim /etc/network/interfaces
sudo vim /etc/resolv.conf
sudo /etc/init.d/networking restart 可能不起作用
sudo reboot

另外长按重置路由器要在带电时操作。

搜索

grep全称是Global Regular Expression Print,表示全局正则表达式版本,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep默认对字母大小写敏感,选项-i可以指定为不敏感

grep 'abc' *.java
#递归查找所有js文件中的setting
grep -r 'setting' ./ --include='*.js'
$ ps -ef | grep java

常用命令

netstat -anptl 查看服务监听端口
tar -zxvf xxxx.tgz 解压压缩包
#移动当前目录下的全部内容到另一个目录中
mv ./* ../dir2/
合并目录
cp -frap source_dir/* dest_dir/
查看目录下各目录文件大小:
cd到上级目录,然后输入一条命令即可查询每个子目录所占用的空间大小,可以更改–max-depth参数的值,该参数表示查询子目录的层级,当前为1层。
du -h –max-depth=1

查看当前系统的发行版信息

lsb_release命令用来 prints certain LSB (Linux Standard Base) and Distribution information。
系统上如果没有安装了这个命令,还可以通过cat /etc/issue 查看。

lsb_release -a
lsb_release -d -s 
cat /etc/issue
head -1 /etc/issue

查看Centos系统信息

cat /etc/redhat-release #查看os版本
free -h #查看内存使用
uname -a #查看内核/操作系统/CPU信息
uname -r #查看内核版本,4.2.0-27-generic

http://www.centoscn.com/CentOS/help/2013/0728/738.html

tcpdump抓包工具

tcpdump是linux命令行下常用的的一个抓包工具
http://www.45it.com/linux/201409/37882.htm

vi命令

:$ 跳到文件最后一行,:0或:1 跳到文件第一行
s
hift + g 跳到文件最后一行,gg 跳到文件第一行。

性能查看

Linux服务器I/O过高原因及解决方法
http://www.linuxidc.com/Linux/2016-09/134813.htm

统计代码行数

find . -name "*.java"|xargs wc -l|grep "total"|awk '{print $1}'  
find . -name "*.java"|xargs cat|wc -l

查看端口及服务

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

#查看端口是否在使用中
lsof -i :14000

linux sed

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作

写内容到文件
echo ‘内容’ > 文件

查看进程
ps 或 top

iptables防火墙

iptables

iptables 是一个Linux内核中的强大防火墙。

查看iptables的配置文件内容

vi /etc/sysconfig/iptables

可能这个文件还不存在,还没有配置规则。

下列命令添加一些开放端口

 /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
 /sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
 /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
 /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

保存

 /etc/init.d/iptables save

查看打开的端口:

/etc/init.d/iptables status

停止和启动

/etc/init.d/iptables stop
/etc/init.d/iptables start
/etc/init.d/iptables restart

CentOS 6.5 iptables原理详解以及功能说明
http://tanxw.blog.51cto.com/4309543/1389114

阿里云服务器的端口开放操作要到阿里云控制台里云操作了。