SSH指南

基本概念

SSH是1995年由芬兰学者Tatu Ylonen设计,用于计算机之间加密登录。

SSH功能:

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  • 突破防火墙的限制完成一些之前无法建立的 TCP 连接。

公钥登录的原理:

  1. 远程主机发送随机字符串
  2. 本地主机用私钥加密发给远程
  3. 远程用公钥解密成功则允许登录

客户端常用配置:

# file: ~/.ssh/config
Host *
        ControlMaster auto
        ControlPath ~/.ssh/%r@%h-%p
        ControlPersist yes              # 启用长连接
        Compression yes                 # 启用压缩,传输提升速度

长连接选项非常有用:

  1. 重复登录不需要反复输入密码
  2. 多个SSH连接共享同一个连接,如sftp、rsync、scp、git等
  3. 提升scp复制性能,不必每个文件单独认证

服务端常用配置:

# file: /etc/ssh/sshd_config
PermitRootLogin yes                     # 支持root登录
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

高效传输

客户端zssh工具支持lrzsz传输文件,最大的好处是可在多次跳转之后直接传输文件。但需要在本地和远程都安装lrzsz工具。

zssh user@host

# local to remote
rz -be
Ctrl-@
sz -be files

# remote to local
sz -be files
Ctrl-@
rz -be

端口转发

ssh -CNTfgqn2 -D 1080 user@host
-C
压缩数据传输
-N
不执行SHELL
-T
不分配伪终端
-f
后台模式
-g
允许打开的端口让远程主机访问
-q
安静模式
-n
配置stdin为/dev/null禁止从stdin读数据
-2
使用v2版协议
-L
本地端口转发
-R
远程端口转发
-D
动态端口转发

启用上面的动态端口转发后,可以用如下命令启动chrome实现穿透。

google-chrome --proxy-server="socks://127.0.0.1:1080"

通过ssh隧道访问gitlab方法:达到 host –> proxy –> gitlab 效果。

  1. 在host配置~/.ssh/config指定gitlab密钥

    Host localhost
            user git
            IdentityFile ~/.ssh/micky.key
    
  2. 启动本地转发

    ssh -CNTfgqn2 -L 2222:gitlab.com:22 user@host
    
  3. 拉取仓库

    ssh://git@localhost:2222/repo/name.git
    

参考资料

网络诊断

常用工具

ping

-s packagesize
指定数据包大小,单位为字节,默认56B
-i seconds
时间间隔
-c count
次数

netstat

netstat                                 # 显示当前建立的连接
netstat -nplt                           # 显示正在监听的TCP服务
netstat -npltux                         # 显示正在监听的TCP/UDP/UNIX服务
netstat -i                              # 显示所有网络接口
-n
直接显示地址,不转换为名字
-p
显示进程PID和名字
-i
显示网络接口
-l
只显示正在监听的连接
-t
显示TCP连接
-u
显示UDP连接
-x
显示UNIX连接
-a
显示所有连接