SSH¶
SSH是GOST中的一种数据通道类型。
SSH有两种模式:隧道模式和转发模式。
隧道模式¶
服务端
客户端
转发模式¶
采用标准SSH协议的端口转发功能,仅支持TCP。
服务端
客户端
使用系统本身的SSH服务
在转发模式下服务端可以直接使用系统本身的SSH服务,例如Linux中的OpenSSH(sshd)服务。
认证¶
SSH支持用户名/密码认证和PubKey认证两种认证方式。
用户名/密码认证¶
认证信息作用对象
在命令行模式下,认证信息(user:pass)设置的是SSH通道的认证(Listener和Dialer),而非Handler和Connector。 此行为仅在使用ssh和sshd通道时有效。
服务端
客户端
PubKey认证¶
服务端
服务端通过authorizedKeys选项设置已授权客户端公钥列表。
客户端
客户端通过privateKeyFile和passphrase选项设置证书私钥和私钥密码。
privateKeyFile路径支持~前缀进行家目录扩展(例如~/.ssh/id_rsa)。
passphrase可以明文指定,也可以开启passphraseFromKeyring选项从系统密钥环中读取,此时GOST会通过密钥环读取SSH <privateKeyFile>对应的密码,passphrase参数将被忽略。
此外,SSHD拨号器还支持通过SSH_AUTH_SOCK环境变量自动连接本地SSH Agent进行公钥认证,无需在配置文件中指定私钥文件路径。
services:
- name: service-0
addr: :8080
handler:
type: auto
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: :2222
connector:
type: relay
dialer:
type: ssh
metadata:
privateKeyFile: /path/to/privateKeyFile
passphrase: "123456"
# passphraseFromKeyring: true # 从系统密钥环读取密码
心跳¶
客户端通过keepalive选项开启心跳,并通过ttl选项设置心跳包发送的间隔时长(默认30s)。
也可以通过keepalive.timeout选项设置心跳超时时长(默认15s),keepalive.retries选项设置心跳发送重试次数(默认1次)
组合使用¶
SSH数据通道的隧道模式可以与各种代理协议组合使用。
HTTP Over SSH¶
SOCKS5 Over SSH¶
Relay Over SSH¶
端口转发¶
SSH通道的隧道模式也可以用作端口转发。
服务端
通过使用SSH数据通道的端口转发,给1080端口的SOCKS5代理服务增加了SSH数据通道。
此时2222端口等同于: