Linux下ssh动态端口转发

SSH协议是一个非常棒的协议,因为他的存在,在互联网上传输才会的安全。 一般在Linux上,ssh客户端程序都会安装,ssh服务端程序不会安装。如果需要安装自己apt或者yum安装一下。 ssh的端口转...

SSH协议是一个非常棒的协议,因为他的存在,在互联网上传输才会的安全。

一般在Linux上,ssh客户端程序都会安装,ssh服务端程序不会安装。如果需要安装自己apt或者yum安装一下。

ssh的端口转发给我们带来了很多方便。比如我们在一个公共的WIFI环境或者局域网中,我们的网络包可以被他们截取,有了ssh的端口转发,他们之间会有一个加密的过程,防止被监听。

另外通过ssh端口转发,我们可以访问一些不能访问的网站。想象一下,你处于一个局域网中、或者学校的网络中,那么你的网络无法访问某些网站,此限制看网络管理员是如何限制的。比如在天朝,你无法访问facebook;再或者有些网站会封锁中国的IP,这些通过ssh的端口转发,就可以轻松的访问到。


attachments-2017-03-Cl0V849x58d9342fefc8

根据图例说明:我们用浏览器访问www.google.com,此时浏览器开启了一个端口15453,但是发现在访问到某个节点,此网络包被丢弃了或者返回了错误的信息,导致我们无法访问www.google.com。但是我们想到了另外的一个方法,因为我们发现我们可以访问proxy.remotehost.com,而且他可以访问google.com,因此我们利用proxy.remotehost.com来做一个跳转。

因此我们利用的ssh的动态端口转发技术来达到这个目的。通过命令,我们在本地开启了一个7070端口,并且将7070端口关联到了proxy.remotehost.com的22号端口上。通过对浏览器设置,将所有的请求都转发到127.0.0.1:7070上,通过ssh的隧道,会将数据包传递到了proxy.remotehost.com:22。proxy服务器会随机开启一个端口去访问google.com。然后将数据在返回给proxy,再返回给浏览器。这就是一个代理转发的一个过程了。

下面我来看看如何具体的操作。

基本的动态端口转发

首先在我们的机器运行一下命令,先开启本机的7070端口到远程的22号端口的连接。

1
ssh -D 7070 -l username proxy.remotehost.com

参数说明:

  • -D 7070 -D [bind_address:]port D参数说明我们开启一个本地的端口转发。通过在本地分配一个socket去监听端口。只要有连接请求到这个port上来时,这个连接就会被安全通过给转发出去,应用程序的协议将有远程机器来决定连接到哪里。目前支持SOCKS4和SOCKS5协议,ssh会扮演一个SOCKS5服务器。另外只有root用于才能转发原始端口。
  • -l username 小写字母l参数指定了登录ssh服务器的用户名
  • proxy.remotehost.com 指定了我们需要登录的远程ssh服务器。默认使用ssh程序的指定端口,一般是22号端口,除非系统做了修改

通过这一个命令,再配合一下浏览器的设置,我们就能访问被封锁的网站了。但是不能太高兴了,还是有些问题的。

帐号一登录成功就被退出了?

我的帐号在输入密码成功后,就被强制退出了,这样不就不能进行动态端口转发了吗?

其实这情况很容易解决,因为你的帐号被远程服务器做了手脚了,ssh服务器禁止这个帐号登录请求shell终端了,不能执行远程命令。目的是防止你登录他的系统进行命令的操作。一般专门用于代理的帐号都做了这个限制。

这个时候我们就需要增加一个参数-N来解决这个问题了。

1
ssh -D 7070 -l username proxy.remotehost.com -N

-N 参数是不请求一个shell界面,不执行远程命令。这个在只是端口转发的时候非常实用(只能在SSH2协议下工作,现在一般都是SSH2协议了,SSH1协议有安全问题,基本不用了)

让这个端口转发连接后台运行

如果只是上面的命令,在登录成功后,你是无法在当前的shell终端中进行任何的操作的,此时你想要干其他的事情只能再起一个端口了。

通常这个是没有意义的,放一个无用的窗口在那边,我们可以增加一个-f参数,让这个连接在后台运行

1
ssh -D 7070 -l username proxy.remotehost.com -Nf

这样我们就可以用当前的shell终端继续工作了。或者弄一个开机自动运行的脚本,开机自动连接。

给ssh连接增加http代理

如果你的PC无法直接访问到ssh服务器上,但是只有http代理可以访问,那么我们要建立这个socks5的动态端口转发只能为他加上一个代理了。

1
ssh -D 7070 -l username proxy.remotehost.com -Nf -o ProxyCommand="connect -H web-proxy.oa.com:8080 %h %p "

加上了-o ProxyCommand="connect -H web-proxy.oa.com:8080 %h %p "这个参数,就让我们的ssh连接建立在了一个http代理上了,这个应用对于在公司内网里面非常实用。

其中ProxyCommand指定了使用connect程序来进行代理。通常还可以使用corkscrew来达到相同的效果。

附connect的安装。

如果你是Ubuntu或者Debain系列的使用

1
sudo apt-get install connect-proxy

如果你是Ubuntu、Debain系列没找到源或者是Centos系列的,需用从下面去访问下载http://pkgs.org/download/connect-proxy。寻找一个适合你系统的包下载下来。

1
2
rpm -ivh connect-proxy-1.93-2.el6.x86_64.rpm
或者rpm -Uvh connect-proxy-1.93-2.el6.x86_64.rpm

一段时间没动作,连接自动断开了

一段时间没有发送消息,就出现了

1
Write failed: Broken pipe

这样的情况,这样的情况就是因为长时间没有发送消息,此隧道被关闭了。

因此我们需要设置一下ssh,让其每隔一段时间就发送一些消息,想服务器说明我还活着,不管关闭了我们的连接。


ssh -D 7070 -l username proxy.remotehost.com -Nf -o ProxyCommand="connect -H web-proxy.oa.com:8080 %h %p " -o ServerAliveInterval=60



A similar problem

Another possible lead

I had the same problem using ~/.ssh/authorized_keys with permitopen.

As I use autossh to create a tunnel, I need two ports:

  • one for connection (10000),
  • one for monitoring (10001).
On client side

This gave me a similar problem with monitoring port:

autossh -M 10001 -o GatewayPorts=yes -o ServerAliveInterval=60  -o TCPKeepAlive=yes -T -N -R :10000:localhost:22 -i ~/.ssh/id_rsa user@remote

I had that message (after 10 minutes):

channel 2: open failed: administratively prohibited: open failed
On remote side

My /var/log/auth.log contained:

Received request to connect to host 127.0.0.1 port 10001, but the request was denied.

In my ~/.ssh/authorized_keys (remote side) I had this:

command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="localhost:10000",permitopen="localhost:10001" ssh-rsa AAAA...
How to solve it

I solved this by replacing localhost instances with 127.0.0.1:

command="/home/user/tunnel",no-X11-forwarding,no-pty,permitopen="127.0.0.1:10000",permitopen="127.0.0.1:10001" ssh-rsa AAAA...

It seems that SSH does not understand that localhost is a shortcut to 127.0.0.1, hence the message in auth.log and the administratively prohibited message.

What I understand here is that administratively means "due to a specific configuration on server side".

下面是动态代理sock5代理上网的小脚本

***************************************************************************************

*   #!/bin/bash                                                                                               *

*   #if the ssh process exists,now kill it                                                          *

*    if [ "`pidof ssh`" != "" ];then                                                                        *

 *     kill -9 `pidof ssh`                                                                                       *

*       fi                                                                                                               *

*   ssh -D 127.0.0.1:44444 -l root   208.87.242.113 -NfT                                  *

* -o ServerAliveInterval=60 -o TCPKeepAlive=yes -o GatewayPorts=yes        *

* chromium-browser --proxy-server="socks://127.0.0.1:44444"                        *

*******************************************************************************************



下面附加上sshd_config 文件中的配置解释:

 

  1. SSHD_CONFIG(5)            OpenBSD Programmer's Manual           SSHD_CONFIG(5)  
  2.   
  3. 名称  
  4.      sshd_config - OpenSSH SSH 服务器守护进程配置文件  
  5.   
  6. 大纲  
  7.      /etc/ssh/sshd_config  
  8.   
  9. 描述  
  10.      sshd(8) 默认从 /etc/ssh/sshd_config 文件(或通过 -f 命令行选项指定的文件)读取配置信息。  
  11.      配置文件是由"指令 值"对组成的,每行一个。空行和以'#'开头的行都将被忽略。  
  12.      如果值中含有空白符或者其他特殊符号,那么可以通过在两边加上双引号(")进行界定。  
  13.      [注意]值是大小写敏感的,但指令是大小写无关的。  
  14.   
  15.      当前所有可以使用的配置指令如下:  
  16.   
  17.      AcceptEnv  
  18.              指定客户端发送的哪些环境变量将会被传递到会话环境中。[注意]只有SSH-2协议支持环境变量的传递。  
  19.              细节可以参考 ssh_config(5) 中的 SendEnv 配置指令。  
  20.              指令的值是空格分隔的变量名列表(其中可以使用'*''?'作为通配符)。也可以使用多个 AcceptEnv 达到同样的目的。  
  21.              需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。由于这个原因,该指令应当小心使用。  
  22.              默认是不传递任何环境变量。  
  23.   
  24.      AddressFamily  
  25.              指定 sshd(8) 应当使用哪种地址族。取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。  
  26.   
  27.      AllowGroups  
  28.              这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*""?"通配符)。默认允许所有组登录。  
  29.              如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。  
  30.              这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。  
  31.              这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理:  
  32.              DenyUsers, AllowUsers, DenyGroups, AllowGroups  
  33.   
  34.      AllowTcpForwarding  
  35.              是否允许TCP转发,默认值为"yes"。  
  36.              禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。  
  37.   
  38.      AllowUsers  
  39.              这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*""?"通配符)。默认允许所有用户登录。  
  40.              如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户。  
  41.              如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。  
  42.              这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理:  
  43.              DenyUsers, AllowUsers, DenyGroups, AllowGroups  
  44.   
  45.      AuthorizedKeysFile  
  46.              存放该用户可以用来登录的 RSA/DSA 公钥。  
  47.              该指令中可以使用下列根据连接时的实际情况进行展开的符号:  
  48.              %% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名。  
  49.              经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。  
  50.              默认值是".ssh/authorized_keys"。  
  51.   
  52.      Banner  
  53.              将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。  
  54.              这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。  
  55.   
  56.      ChallengeResponseAuthentication  
  57.              是否允许质疑-应答(challenge-response)认证。默认值是"yes"。  
  58.              所有 login.conf(5) 中允许的认证方式都被支持。  
  59.   
  60.      Ciphers  
  61.              指定SSH-2允许使用的加密算法。多个算法之间使用逗号分隔。可以使用的算法如下:  
  62.              "aes128-cbc""aes192-cbc""aes256-cbc""aes128-ctr""aes192-ctr""aes256-ctr",  
  63.              "3des-cbc""arcfour128""arcfour256""arcfour""blowfish-cbc""cast128-cbc"  
  64.              默认值是可以使用上述所有算法。  
  65.   
  66.      ClientAliveCountMax  
  67.              sshd(8) 在未收到任何客户端回应前最多允许发送多少个"alive"消息。默认值是 3 。  
  68.              到达这个上限后,sshd(8) 将强制断开连接、关闭会话。  
  69.              需要注意的是,"alive"消息与 TCPKeepAlive 有很大差异。  
  70.              "alive"消息是通过加密连接发送的,因此不会被欺骗;而 TCPKeepAlive 却是可以被欺骗的。  
  71.              如果 ClientAliveInterval 被设为 15 并且将 ClientAliveCountMax 保持为默认值,  
  72.              那么无应答的客户端大约会在45秒后被强制断开。这个指令仅可以用于SSH-2协议。  
  73.   
  74.      ClientAliveInterval  
  75.              设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,  
  76.              sshd(8) 将通过安全通道向客户端发送一个"alive"消息,并等候应答。  
  77.              默认值 0 表示不发送"alive"消息。这个选项仅对SSH-2有效。  
  78.   
  79.      Compression  
  80.              是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密。  
  81.              可用值:"yes""delayed"(默认), "no"。  
  82.   
  83.      DenyGroups  
  84.              这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*""?"通配符)。默认允许所有组登录。  
  85.              如果使用了这个指令,那么这些组中的成员将被拒绝登录。  
  86.              这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。  
  87.              这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理:  
  88.              DenyUsers, AllowUsers, DenyGroups, AllowGroups  
  89.   
  90.      DenyUsers  
  91.              这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*""?"通配符)。默认允许所有用户登录。  
  92.              如果使用了这个指令,那么这些用户将被拒绝登录。  
  93.              如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。  
  94.              这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理:  
  95.              DenyUsers, AllowUsers, DenyGroups, AllowGroups  
  96.   
  97.      ForceCommand  
  98.              强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录shell执行(shell -c)。  
  99.              这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。  
  100.              这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。  
  101.   
  102.      GatewayPorts  
  103.              是否允许远程主机连接本地的转发端口。默认值是"no"。  
  104.              sshd(8) 默认将远程端口转发绑定到loopback地址。这样将阻止其它远程主机连接到转发端口。  
  105.              GatewayPorts 指令可以让 sshd 将远程端口转发绑定到非loopback地址,这样就可以允许远程主机连接了。  
  106.              "no"表示仅允许本地连接,"yes"表示强制将远程端口转发绑定到统配地址(wildcard address),  
  107.              "clientspecified"表示允许客户端选择将远程端口转发绑定到哪个地址。  
  108.   
  109.      GSSAPIAuthentication  
  110.              是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2。  
  111.   
  112.      GSSAPICleanupCredentials  
  113.              是否在用户退出登录后自动销毁用户凭证缓存。默认值是"yes"。仅用于SSH-2。  
  114.   
  115.      HostbasedAuthentication  
  116.              这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。推荐使用默认值"no"。  
  117.              推荐使用默认值"no"禁止这种不安全的认证方式。  
  118.   
  119.      HostbasedUsesNameFromPacketOnly  
  120.              在开启 HostbasedAuthentication 的情况下,  
  121.              指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询。  
  122.              "yes"表示 sshd(8) 信任客户端提供的主机名而不进行反向查询。默认值是"no"。  
  123.   
  124.      HostKey  
  125.              主机私钥文件的位置。如果权限不对,sshd(8) 可能会拒绝启动。  
  126.              SSH-1默认是 /etc/ssh/ssh_host_key 。  
  127.              SSH-2默认是 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key 。  
  128.              一台主机可以拥有多个不同的私钥。"rsa1"仅用于SSH-1,"dsa""rsa"仅用于SSH-2。  
  129.   
  130.      IgnoreRhosts  
  131.              是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。  
  132.              不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值"yes"。  
  133.   
  134.      IgnoreUserKnownHosts  
  135.              是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。  
  136.              默认值是"no"。为了提高安全性,可以设为"yes"。  
  137.   
  138.      KerberosAuthentication  
  139.              是否要求用户为 PasswordAuthentication 提供的密码必须通过 Kerberos KDC 认证,也就是是否使用Kerberos认证。  
  140.              要使用Kerberos认证,服务器需要一个可以校验 KDC identity 的 Kerberos servtab 。默认值是"no"。  
  141.   
  142.      KerberosGetAFSToken  
  143.              如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后,  
  144.              将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。  
  145.   
  146.      KerberosOrLocalPasswd  
  147.              如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制(比如 /etc/passwd)。  
  148.              默认值为"yes"。  
  149.   
  150.      KerberosTicketCleanup  
  151.              是否在用户退出登录后自动销毁用户的 ticket 。默认值是"yes"。  
  152.   
  153.      KeyRegenerationInterval  
  154.              在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。  
  155.              这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。  
  156.              设为 0 表示永不重新生成,默认为 3600(秒)。  
  157.   
  158.      ListenAddress  
  159.              指定 sshd(8) 监听的网络地址,默认监听所有地址。可以使用下面的格式:  
  160.   
  161.                    ListenAddress host|IPv4_addr|IPv6_addr  
  162.                    ListenAddress host|IPv4_addr:port  
  163.                    ListenAddress [host|IPv6_addr]:port  
  164.   
  165.              如果未指定 port ,那么将使用 Port 指令的值。  
  166.              可以使用多个 ListenAddress 指令监听多个地址。  
  167.   
  168.      LoginGraceTime  
  169.              限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。  
  170.   
  171.      LogLevel  
  172.              指定 sshd(8) 的日志等级(详细程度)。可用值如下:  
  173.              QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3  
  174.              DEBUG 与 DEBUG1 等价;DEBUG2 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。  
  175.              比 DEBUG 更详细的日志可能会泄漏用户的敏感信息,因此反对使用。  
  176.   
  177.      MACs  
  178.              指定允许在SSH-2中使用哪些消息摘要算法来进行数据校验。  
  179.              可以使用逗号分隔的列表来指定允许使用多个算法。默认值(包含所有可以使用的算法)是:  
  180.              hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96  
  181.   
  182.      Match  
  183.              引入一个条件块。块的结尾标志是另一个 Match 指令或者文件结尾。  
  184.              如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。  
  185.              Match 的值是一个或多个"条件-模式"对。可用的"条件"是:User, Group, Host, Address 。  
  186.              只有下列指令可以在 Match 块中使用:AllowTcpForwarding, Banner,  
  187.              ForceCommand, GatewayPorts, GSSApiAuthentication,  
  188.              KbdInteractiveAuthentication, KerberosAuthentication,  
  189.              PasswordAuthentication, PermitOpen, PermitRootLogin,  
  190.              RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,  
  191.              X11Forwarding, X11UseLocalHost  
  192.   
  193.      MaxAuthTries  
  194.              指定每个连接最大允许的认证次数。默认值是 6 。  
  195.              如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。  
  196.   
  197.      MaxStartups  
  198.              最大允许保持多少个未认证的连接。默认值是 10 。  
  199.              到达限制后,将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。  
  200.   
  201.      PasswordAuthentication  
  202.              是否允许使用基于密码的认证。默认为"yes"。  
  203.   
  204.      PermitEmptyPasswords  
  205.              是否允许密码为空的用户远程登录。默认为"no"。  
  206.   
  207.      PermitOpen  
  208.              指定TCP端口转发允许的目的地,可以使用空格分隔多个转发目标。默认允许所有转发请求。  
  209.              合法的指令格式如下:  
  210.                    PermitOpen host:port  
  211.                    PermitOpen IPv4_addr:port  
  212.                    PermitOpen [IPv6_addr]:port  
  213.              "any"可以用于移除所有限制并允许一切转发请求。  
  214.   
  215.      PermitRootLogin  
  216.              是否允许 root 登录。可用值如下:  
  217.              "yes"(默认) 表示允许。"no"表示禁止。  
  218.              "without-password"表示禁止使用密码认证登录。  
  219.              "forced-commands-only"表示只有在指定了 command 选项的情况下才允许使用公钥认证登录。  
  220.                                    同时其它认证方法全部被禁止。这个值常用于做远程备份之类的事情。  
  221.   
  222.      PermitTunnel  
  223.              是否允许 tun(4) 设备转发。可用值如下:  
  224.              "yes""point-to-point"(layer 3), "ethernet"(layer 2), "no"(默认)。  
  225.              "yes"同时蕴含着"point-to-point""ethernet"。  
  226.   
  227.      PermitUserEnvironment  
  228.              指定是否允许 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。  
  229.              默认值是"no"。如果设为"yes"可能会导致用户有机会使用某些机制(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。  
  230.   
  231.      PidFile  
  232.              指定在哪个文件中存放SSH守护进程的进程号,默认为 /var/run/sshd.pid 文件。  
  233.   
  234.      Port  
  235.              指定 sshd(8) 守护进程监听的端口号,默认为 22 。可以使用多条指令监听多个端口。  
  236.              默认将在本机的所有网络接口上监听,但是可以通过 ListenAddress 指定只在某个特定的接口上监听。  
  237.   
  238.      PrintLastLog  
  239.              指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。默认值是"yes"。  
  240.   
  241.      PrintMotd  
  242.              指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。默认值是"yes"。  
  243.   
  244.      Protocol  
  245.              指定 sshd(8) 支持的SSH协议的版本号。  
  246.              '1''2'表示仅仅支持SSH-1和SSH-2协议。"2,1"表示同时支持SSH-1和SSH-2协议。  
  247.   
  248.      PubkeyAuthentication  
  249.              是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"。  
  250.   
  251.      RhostsRSAAuthentication  
  252.              是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。  
  253.              这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。  
  254.              出于安全考虑,建议使用默认值"no"。  
  255.   
  256.      RSAAuthentication  
  257.              是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。  
  258.   
  259.      ServerKeyBits  
  260.              指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。  
  261.   
  262.      StrictModes  
  263.              指定是否要求 sshd(8) 在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查。  
  264.              强烈建议使用默认值"yes"来预防可能出现的低级错误。  
  265.   
  266.      Subsystem  
  267.              配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。  
  268.              值是一个子系统的名字和对应的命令行(含选项和参数)。比如"sft /bin/sftp-server"。  
  269.   
  270.      SyslogFacility  
  271.              指定 sshd(8) 将日志消息通过哪个日志子系统(facility)发送。有效值是:  
  272.              DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7  
  273.   
  274.      TCPKeepAlive  
  275.              指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes"。  
  276.              这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。  
  277.              可以设为"no"关闭这个特性。  
  278.   
  279.      UseDNS  
  280.              指定 sshd(8) 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应。默认值为"yes"。  
  281.   
  282.      UseLogin  
  283.              是否在交互式会话的登录过程中使用 login(1) 。默认值是"no"。  
  284.              如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login(1) 不知道如何处理 xauth(1) cookies 。  
  285.              需要注意的是,login(1) 是禁止用于远程执行命令的。  
  286.              如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。  
  287.   
  288.      UsePrivilegeSeparation  
  289.              是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。  
  290.              认证成功后,将以该认证用户的身份创建另一个子进程。  
  291.              这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。  
  292.   
  293.      X11DisplayOffset  
  294.              指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 。  
  295.              这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。  
  296.   
  297.      X11Forwarding  
  298.              是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。  
  299.              如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。  
  300.              那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。  
  301.              需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。  
  302.              如果启用了 UseLogin ,那么X11转发将被自动禁止。  
  303.   
  304.      X11UseLocalhost  
  305.              sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。  
  306.              sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。  
  307.              这可以防止远程主机连接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工作。  
  308.              为了兼容这些老旧的X11客户端,你可以设为"no"。  
  309.   
  310.      XAuthLocation  
  311.              指定 xauth(1) 程序的绝对路径。默认值是 /usr/X11R6/bin/xauth  


  • 发表于 2017-03-27 23:48
  • 阅读 ( 71 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
石天
石天

437 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章