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

然后使用git clone git@gitee.com:xxx/
xxx.git 下载代码

方法二,通过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

ubuntu16.04 安装ssh
sudo apt-get install openssh-server
sudo service ssh start
sudo ps -e | grep ssh 或者 sudo service ssh status
管理ubuntu server自启程序
http://yaxin-cn.github.io/Linux/manage-startup-program-on-ubuntu-server.html

Ubuntu16.04使用shadowsocks GUI
http://blog.csdn.net/alextan_/article/details/61618073
Ubuntu 16.04下安装64位谷歌Chrome浏览器
http://www.linuxidc.com/Linux/2016-05/131096.htm
设置chrome翻墙,可以在终端启动chrome的时候附带上参数设置代理
/usr/bin/google-chrome-stable –proxy-server=socks5://127.0.0.1:1080
ubuntu16.04 chrome WebGL 不受支持,在Ubuntu下开启Chrome的WebGL功能(开启GPU加速)
http://tieba.baidu.com/p/3253462709

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
#查找软件包
yum search ~
#卸载
yum remove ~

修改网络

服务器地址设置为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 查看服务监听端口
netstat -tunpl 查看服务监听端口
ss -tunpl (ss:socket statistics)

netstat属于net-tools工具集,ss属于ipoute工具集。替换方案如下:

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

查看系统信息

cat /etc/issue
cat /etc/os-release
head -1 /etc/issue
lsb_release -a  #发行版信息,prints certain LSB (Linux Standard Base) and Distribution information。
lsb_release -d -s 
cat /etc/redhat-release #查看os版本
free -h #查看内存使用
uname -a #查看内核/操作系统/CPU信息
uname -r #查看内核版本,4.2.0-27-generic

其它软件信息

#glibc库版本
strings /lib64/libc.so.6 |grep GLIBC_
#下载文件
wget url1
curl -O url1

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 跳到文件第一行。
tail -n 20 xx.txt 查看最后20行

性能查看

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
#排除node_modules、bower_components等目录
find . ! -path '*node_modules*' ! -path '*bower_components*' ! -path '*libs*' ! -path '*lib*' ! -path '*grunt*' ! -path '*angular*' -name "*.js" | xargs cat | wc -l

查看端口及服务

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

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

linux sed

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

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

查看进程
ps 或 top

查看当前系统环境变量
env

防火墙

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
iptables -I INPUT -p tcp --dport 443 -j ACCEPT

保存

 
/etc/init.d/iptables save 
/sbin/iptables-save
service iptables save

查看打开的端口:

/etc/init.d/iptables status

停止和启动

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

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

firewalld

CentOS7使用firewalld打开关闭防火墙与端口
https://www.cnblogs.com/moxiaoan/p/5683743.html

记录

线上腾讯云服务器使用的是iptables。
阿里云服务器的端口开放操作要到阿里云控制台里云操作了。可能对于专有网络需要在控制台里操作端口放行,对于经典网络可以在OS中操作。

云服务器

奇异互动 http://www.7e.hk/Cloud/

查看邮件日志文件
# tail -f /var/log/maillog
# rm /var/log/maillog
Postfix 邮件系统常用测试与管理命令
#postsuper -d ALL
#/etc/init.d/postfix status
#/etc/init.d/postfix stop
http://www.linuxde.net/2011/11/2810.html

infoq迷你书
http://www.infoq.com/cn/minibooks/

保护你的ssh服务器
https://wangbin.io/blog/it/ssh-protect.html
root用户ssh可以登录,FileZilla sftp不能登录链接CentOS解决办法(好像不行)
https://www.jianshu.com/p/65c4bbceb08c

在FileZilla中连接sftp,报错误: 20 秒后无活动,连接超时,错误: 无法连接到服务器。
尝试在设置-连接中增大超时秒数。

cglib不能强制升级,有可能影响系统环境,出现基本命令失效的现象。

Linux 性能监测

free

free命令可以用来查看系统内存使用情况。
命令参数:
–help 帮助
-h show human-readable output
-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。
显示列:
total:总的物理内存
used:使用中的内存
free:完全空闲的内存

top

top命令用来监控linux的系统状况,比如cpu、内存的使用。
显示解释:
第一行内容有:当前系统时间、系统运行时长、当前登录系统用户数、1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5就表明系统在超负荷运转。

top命令是Linux上进行系统监控的首选命令,但top命令的监控最小单位是进程,所以看不到程序的线程数和客户连接数,通常可以ps和netstate两个命令来补充top的不足。

CentOS详解top命令各个数据的含义
https://www.cnblogs.com/ronli/p/centos-top.html

top交互命令

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
shift+m: 按内存占用比排序

top显示结果字段含义

列名 含义
PID 进程ID
USER 进程所有者的用户名
PR 任务优先级
NI nice值,数值越小表示优先级越高。
VIRT 进程使用的虚拟内存总量。单位:kb,VIRT=SWAP+RES。
RES 进程使用的、未被换出的物理内存大小。单位:kb,RES=CODE+DATA。
SHR 共享内存大小。单位:kb。
S 进程状态,表示如下:
D= 不可中断的睡眠状态
R= 运行
S= 睡眠
T= 跟踪 / 停止
Z= 僵尸进程
%CPU 上次更新到现在的 CPU 时间占用百分比。
TIME+ 进程使用的 CPU 时间总计,精确到 1/100 秒
COMMAND 命令名 / 命令行