ssh

主要用途:

  1. 管理远程主机
  2. 加密SSH client 与 SSH server 传输的数据
  3. 突破防火墙限制

常用到的命令行参数有:

    -C 表示信息压缩传输;
    -f 表示后台认证用户/密码(通常和-N连用),而不登录到远程主机(也就是后台运行);
    -N 表示不执行shell,仅做端口转发,常常与-f/-g连用;
    -g 表示允许打开的端口让远程主机访问
    -L 表示将远程主机服务器指定端口映射到客户机某端口;
    -D 表示客户机 “动态’’转发;
    -R 表示将远程主机服务器端口转发到客户端计算机指定端口

远程操作

上传公钥
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
复制本地src目录到远程主机
cd && tar czv src | ssh user@host 'tar xz'
复制远程src目录到本地主机
ssh user@host 'tar cz src' | tar xzv
查看远程主机是否有[h]ttpd进程
ssh user@host 'ps ax | grep [h]ttpd'

建立SSH隧道(端口转发)

#可基于客户机,实现客户机到远程主机(不能被直接访问)特定服务的直接访问,local_host为空或*代表绑定所有接口,也可以指定本机某个IP,以限定可访问范围
ssh -C -f -N  -L local_host:localhost_port:remote_host:remote_host_port username@remote_host_domain 
#可基于远程主机服务器(提供公网访问服务),实现客户机的公网访问,local_host为空或*代表绑定所有接口,也可以指定本机某个IP,以限定可访问范围
ssh -C -f -N -R local_host:localhost_listen_port:remote_host:remote_host_port username@remote_host_domain
#可基于远程主机网络(可访问被屏蔽网络),实现所谓的翻墙) ,local_host为空或*代表绑定所有接口,也指定本机某个IP,以限定可访问范围
ssh -C -f -N -D local_host:localhost_listen_port username@remote_host_domain

常用的例子 AB 一个网段 CD一个网段 只有A能SSH连接到C B------A---ssh--->C------D

只要在A主机上执行:如下命令就能打通两个网段。

情况一 A想访问D (隧道) 本地转发(正向(本地)端口转发)

ssh -L 8000:D:8888 c@c

情况二 C想访问B (内网穿透) 远程转发(反向(远程)端口转发)

ssh -R 8888:B:22 c@c

情况三 A想无障碍访问墙外的内容,C位于GFW外

ssh -D 1080 c@c

如何保持持久的SSH链接

用ssh链接服务端,一段时间不操作或屏幕没输出(比如复制文件)的时候,会自动断开 解决:(2种办法)

1、在客户端配置

vi /etc/ssh/ssh_config(注意不是/etc/ssh/sshd_config文件),后面添加

Host *
ServerAliveInterval 30
ServerAliveCountMax 99

每隔30秒,向服务器发出一次心跳。若超过99次请求,都没有发送成功,则会主动断开与服务器端的连接。 2、在服务端

编辑服务器 /etc/ssh/sshd_config,最后增加

ClientAliveInterval 60
ClientAliveCountMax 5

ClientAliveInterval表示每隔多少秒,服务器端向客户端发送心跳,是的,你没看错。 下面的ClientAliveInterval表示上述多少次心跳无响应之后,会认为Client已经断开。 所以,总共允许无响应的时间是60*5=300秒。

参考文章

  1. 老调重弹: SSH与隧道和端口转发
  2. SSH原理与应用
  3. 让终端走代理的几种方法
  4. 解决SSH自动断线,无响应的问题。

results matching ""

    No results matching ""