Linux系统 SSHD服务安全优化方案

1. 修改默认端口

#Port 22

2. 修改监听协议,只监听某个或某些网络协议

#AddressFamily any

AddressFamily inet

3. 修改ssh只监听内网IP地址(IPV4和IPV6)

#ListenAddress 0.0.0.0 #监听IPV4所有网络地址

ListenAddress 192.168.171.0

4. 设置密钥生命周期,定时更新密钥,并将密钥设置尽可能长

—>(需设置Protocol 1)

#KeyRegenerationInterval 1h

在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。

这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。

设为 0 表示永不重新生成,默认为 3600(秒)。

#ServerKeyBits 1024

指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。

5. 禁止root用户远程登录

#PermitRootLogin yes # 允许root用户登录

PermitRootLogin no # 禁止root用户远程登录

6. 开启基于密码认证的远程登录

#PasswordAuthentication yes

是否允许使用基于密码的认证。默认为"yes"。

7. 禁止使用空密码的用户登录

#PermitEmptyPasswords no

是否允许密码为空的用户远程登录。默认为"no"。

8. 关闭质疑-应答模式

Change to no to disable s/key passwords

#ChallengeResponseAuthentication yes

ChallengeResponseAuthentication no

是否允许质疑-应答(challenge-response)认证。默认值是"yes"。

所有 login.conf(5) 中允许的认证方式都被支持。

9. 开启Kerberos认证

Kerberos options

#KerberosAuthentication no

是否要求用户为 PasswordAuthentication 提供的密码必须通过 Kerberos KDC 认证,也就是是否使用Kerberos认证。

要使用Kerberos认证,服务器需要一个可以校验 KDC identity 的 Kerberos servtab 。默认值是"no"。

#KerberosOrLocalPasswd yes

如果 Kerberos 密码认证失败,

那么该密码还将要通过其它的认证机制(比如 /etc/passwd)。

默认值为"yes"。

#KerberosTicketCleanup yes

是否在用户退出登录后自动销毁用户的 ticket 。默认值是"yes"。

#KerberosGetAFSToken no

如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后,

将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。

#KerberosUseKuserok yes

10. 开启GSSAPI用户认证

GSSAPI options

#GSSAPIAuthentication no

是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2。

GSSAPIAuthentication yes

#GSSAPICleanupCredentials yes

是否在用户退出登录后自动销毁用户凭证缓存。默认值是"yes"。仅用于SSH-2。

GSSAPICleanupCredentials yes

#GSSAPIStrictAcceptorCheck yes

是否对客户端进行严格的身份认证.若为”yes”,则客户端会在服务端被验证主机名

#GSSAPIKeyExchange no

11. 禁止 X11 转发

#X11Forwarding no

是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。

如果允许X11转发并且sshd(8)代理的显示区被配置为

在含有通配符的地址(X11UseLocalhost)上监听。

那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,

此指令默认值为"no"。

需要注意的是,禁止X11转发并不能禁止用户转发X11通信,

因为用户可以安装他们自己的转发器。

如果启用了 UseLogin ,那么X11转发将被自动禁止。

X11Forwarding yes

#X11DisplayOffset 10

指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 。

这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。

#X11UseLocalhost yes

sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。

sshd 默认将转发服务器绑定到本地loopback地址

并将 DISPLAY 环境变量的主机名部分设为"localhost"。

这可以防止远程主机连接到 proxy display 。

不过某些老旧的X11客户端不能在此配置下正常工作。

为了兼容这些老旧的X11客户端,你可以设为"no"。

12. 打印警告信息和上次登录信息

#PrintMotd yes

指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。

默认值是"yes"。

#PrintLastLog yes

指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。

默认值是"yes"。

13. 禁止使用Login命令

#UseLogin no

是否在交互式会话的登录过程中使用 login(1) 。默认值是"no"。

如果开启此指令,那么 X11Forwarding 将会被禁止,

因为 login(1) 不知道如何处理 xauth(1) cookies 。

需要注意的是,login(1) 是禁止用于远程执行命令的。

如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。

14. 开启ssh创建非特权子进程处理接入请求

#UsePrivilegeSeparation yes

是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离。

默认值是"yes"。

认证成功后,将以该认证用户的身份创建另一个子进程。

这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。

15. 禁止导入变量

#PermitUserEnvironment no

指定是否允许 sshd(8) 处理 ~/.ssh/environment

以及 ~/.ssh/authorized_keys 中的 environment= 选项。

默认值是"no"。

如果设为"yes"可能会导致用户有机会使用某些机制

(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。

16. 禁止连接ssh端口时,返回补丁版本信息

#ShowPatchLevel no

ShowPatchLevel用于在连接ssh端口时,是否返回SSH的补丁版本信息

百度的…

  1. 系统最小化安装

  2. 更改SSH远程端口号

  3. 更改SSH只监听内网IP

  4. 禁止root账号ssh登录,将常用的账户加入sudo组中

  5. 禁止使用密码登录

  6. 禁止无密码登录

  7. 显示上次登录信息

  8. 使用DNS反查客户端主机名(关闭ssh服务DNS反向解析)

  9. 加强密码复杂度

  10. fail2ban监视系统日志,匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),发送e-mail通知系统管理员

  11. 使用shell脚本来防止暴力破解ssh

  12. 使用xinetd服务

  13. 使用telnet服务

  14. 调整文件描述符数量,进程及文件的打开都会小号文件描述符数量

  15. 打开系统最大连接数上限

  16. 定期更新系统时间(使其和互联网(内网)时间同步)

  17. 配置yum更新源,从国内(企业内网)更新源下载安装软件包

  18. 关闭SELinux和iptables(在工作场景中,如果有外部IP一般要打开iptables,高并发高流量的服务可能无法开启)

  19. 定时自动清理邮件临时目录垃圾文件,防止磁盘的inode数被小文件占满(Centos6和Centos5要清除的目录不同)

  20. 精简并保留必要的开机自启动服务(如crond sshd network rsyslog sysstat)

  21. Linux内核参数优化/etc/sysctl.conf 执行sysctl -p生效

  22. 更爱系统字符集为zh_CN.UTF-8,使其支持中文,防止出现乱码

  23. 命令权限最小化;

  24. 锁定关键系统文件,如:/etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 处理以上内容后把chattr lsattr改名(即转移走)

  25. 清空/etc/issue /etc/issue.net 取出系统及内核版本登录显示

  26. 清除多余的系统虚拟用户帐号

  27. 为grub引导菜单加密

  28. 禁止主机被ping

  29. 打补丁并升级有已知漏洞的软件

sshd_config

1. 修改默认端口

#Port 22

Port 123 #sshd服务端口

2. 修改监听协议,只监听某个或某些网络协议

#AddressFamily any #监听协议(any—>所有网络协议)

AddressFamily inet

指定 sshd(8) 应当使用哪种地址族。

取值范围是:“any”(默认)、“inet”(仅IPv4)、“inet6”(仅IPv6)。

3. 修改ssh只监听内网IP地址(IPV4和IPV6)

#ListenAddress 0.0.0.0 #监听IPV4所有网络地址

ListenAddress 192.168.171.0

#ListenAddress :: #监听IPV6所有网络地址

ListenAddress fe80::20c:29ff:fea1:2066/64 #这个还不会

Disable legacy (protocol version 1) support in the server for new

installations. In future the default will change to require explicit

activation of protocol 1

Protocol 2 #使用ssh第2版本安全协议

HostKey for protocol version 1

#HostKey /etc/ssh/ssh_host_key

HostKeys for protocol version 2

#HostKey /etc/ssh/ssh_host_rsa_key

#HostKey /etc/ssh/ssh_host_dsa_key

主机私钥文件的位置。如果权限不对,sshd(8) 可能会拒绝启动。

SSH-1默认是 /etc/ssh/ssh_host_key 。

SSH-2默认是 /etc/ssh/ssh_host_rsa_key

和 /etc/ssh/ssh_host_dsa_key 。

一台主机可以拥有多个不同的私钥。

"rsa1"仅用于SSH-1,"dsa"和"rsa"仅用于SSH-2。

4. 设置密钥生命周期,定时更新密钥,并将密钥设置尽可能长

—>(需设置Protocol 1)

Lifetime and size of ephemeral version 1 server key

#KeyRegenerationInterval 1h

在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。

这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。

设为 0 表示永不重新生成,默认为 3600(秒)。

#ServerKeyBits 1024

指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。

Logging

obsoletes QuietMode and FascistLogging

#SyslogFacility AUTH

SyslogFacility AUTHPRIV #日志格式

指定 sshd(8) 将日志消息通过哪个日志子系统(facility)发送。有效值是:

DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3,

LOCAL4, LOCAL5, LOCAL6, LOCAL7

#LogLevel INFO #日志信息级别

指定 sshd(8) 的日志等级(详细程度)。可用值如下:

QUIET, FATAL, ERROR, INFO(默认), VERBOSE,

DEBUG, DEBUG1, DEBUG2, DEBUG3

DEBUG 与 DEBUG1 等价;

DEBUG2 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。

比 DEBUG 更详细的日志可能会泄漏用户的敏感信息,因此反对使用。

Authentication: #中文意思:身份验证

#LoginGraceTime 2m #当用户远程连接输入密码等信息是,断开连接前等待最长时间

5. 禁止root用户远程登录

#PermitRootLogin yes # 允许root用户登录

PermitRootLogin no # 禁止root用户远程登录

#StrictModes yes

指定是否要求 sshd(8)

在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查

强烈建议使用默认值"yes"来预防可能出现的低级错误。

#MaxAuthTries 6 # 指定每个连接最大允许的认证次数。默认值是 6 。

如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。

#MaxSessions 10 # 指定每个网络连接允许打开会话的最大数目。默认值为10

#RSAAuthentication yes

是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。

#PubkeyAuthentication yes

是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"。

#AuthorizedKeysFile .ssh/authorized_keys

存放该用户可以用来登录的 RSA/DSA 公钥。

该指令中可以使用下列根据连接时的实际情况进行展开的符号:

%% 表示’%'、%h 表示用户的主目录、%u 表示该用户的用户名。

经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。

默认值是".ssh/authorized_keys"。

#AuthorizedKeysCommand none #公钥命令

#AuthorizedKeysCommandRunAs nobody #上一条设置命令的运行用户

For this to work you will also need host keys in

/etc/ssh/ssh_known_hosts

#RhostsRSAAuthentication no

是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。

仅用于SSH-1。

这是通过在RSA认证成功后再检查 ~/.rhosts

或 /etc/hosts.equiv 进行认证的。

出于安全考虑,建议使用默认值"no"。

similar for protocol version 2

#HostbasedAuthentication no

同上,用于SSH-2

Change to yes if you don’t trust ~/.ssh/known_hosts for

RhostsRSAAuthentication and HostbasedAuthentication

#IgnoreUserKnownHosts no

是否在 RhostsRSAAuthentication

或 HostbasedAuthentication 过程中忽略用户的

~/.ssh/known_hosts 文件。

默认值是"no"。为了提高安全性,可以设为"yes"。

Don’t read the user’s ~/.rhosts and ~/.shosts files

#IgnoreRhosts yes

是否在 RhostsRSAAuthentication 或 HostbasedAuthentication

过程中忽略 .rhosts 和 .shosts 文件。

不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。

推荐设为默认值"yes"。

To disable tunneled clear text passwords, change to no here!

6. 开启基于密码认证的远程登录

#PasswordAuthentication yes

是否允许使用基于密码的认证。默认为"yes"。

7. 禁止使用空密码的用户登录

#PermitEmptyPasswords no

是否允许密码为空的用户远程登录。默认为"no"。

8. 关闭质疑-应答模式

Change to no to disable s/key passwords

#ChallengeResponseAuthentication yes

ChallengeResponseAuthentication no

是否允许质疑-应答(challenge-response)认证。默认值是"yes"。

所有 login.conf(5) 中允许的认证方式都被支持。

9. 开启Kerberos认证

Kerberos options

#KerberosAuthentication no

是否要求用户为 PasswordAuthentication

提供的密码必须通过 Kerberos KDC 认证,

也就是是否使用Kerberos认证。

要使用Kerberos认证,服务器需要一个可以校验

KDC identity 的 Kerberos servtab 。默认值是"no"。

#KerberosOrLocalPasswd yes

如果 Kerberos 密码认证失败,

那么该密码还将要通过其它的认证机制(比如 /etc/passwd)。

默认值为"yes"。

#KerberosTicketCleanup yes

是否在用户退出登录后自动销毁用户的 ticket 。默认值是"yes"。

#KerberosGetAFSToken no

如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后,

将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。

#KerberosUseKuserok yes

10. 开启GSSAPI用户认证

GSSAPI options

#GSSAPIAuthentication no

是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2。

GSSAPIAuthentication yes

#GSSAPICleanupCredentials yes

是否在用户退出登录后自动销毁用户凭证缓存。默认值是"yes"。仅用于SSH-2。

GSSAPICleanupCredentials yes

#GSSAPIStrictAcceptorCheck yes

是否对客户端进行严格的身份认证.若为”yes”,则客户端会在服务端被验证主机名

#GSSAPIKeyExchange no

Set this to ‘yes’ to enable PAM authentication, account processing,

and session processing. If this is enabled, PAM authentication will

be allowed through the ChallengeResponseAuthentication and

PasswordAuthentication. Depending on your PAM configuration,

PAM authentication via ChallengeResponseAuthentication may bypass

the setting of “PermitRootLogin without-password”.

If you just want the PAM account and session checks to run without

PAM authentication, then enable this but set PasswordAuthentication

and ChallengeResponseAuthentication to ‘no’.

#UsePAM no

启用PAM(Pluggable Authentication Module:插入式验证模块)接口。

如果该指令的值设置为”yes”,那么表示启用PAM并运用

ChallengeResponseAuthentication and PasswordAuthentication

到PAM模块和会话过程

由于PAM的身份验证,通常相当于密码验证,所以你应该禁用

PasswordAuthentication 或者 ChallengeResponseAuthentication

如果启用了PAM,那么必须使用root才能运行sshd,默认值为no

UsePAM yes

Accept locale-related environment variables

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

只支持SSHv2协议

指定客户端发送的哪些环境变量将会被传递到会话环境中。

具体的细节可以参考 ssh_config(5) 中的 SendEnv 配置指令。

该关健字的值是空格分隔的变量名列表(其中可以使用’*'和’?'作为通配符)

也可以使用多个AcceptEnv达到同样的目的。

需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。

由于这个原因,该指令应当小心使用默认值:是不传递任何环境变量.

#AllowAgentForwarding yes

是否允许ssh-agent转发,默认值:’yes’

禁止ssh-agent转发并不能增强安全性,

除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。

#AllowTcpForwarding yes

是否允许TPC转发

禁止TCP转发并不能增强安全性,

除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。

#GatewayPorts no

是否允许远程主机连接本地的转发端口。默认值是"no"。

sshd(8) 默认将远程端口转发绑定到loopback地址。

这样将阻止其它远程主机连接到转发端口。

GatewayPorts 指令可以让 sshd 将远程端口转发绑定到非loopback地址,

这样就可以允许远程主机连接了。

"no"表示仅允许本地连接,

"yes"表示强制将远程端口转发绑定到统配地址(wildcard address),

"clientspecified"表示允许客户端选择将远程端口转发绑定到哪个地址。

11. 禁止 X11 转发

#X11Forwarding no

是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。

如果允许X11转发并且sshd(8)代理的显示区被配置为

在含有通配符的地址(X11UseLocalhost)上监听。

那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,

此指令默认值为"no"。

需要注意的是,禁止X11转发并不能禁止用户转发X11通信,

因为用户可以安装他们自己的转发器。

如果启用了 UseLogin ,那么X11转发将被自动禁止。

X11Forwarding yes

#X11DisplayOffset 10

指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 。

这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。

#X11UseLocalhost yes

sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。

sshd 默认将转发服务器绑定到本地loopback地址

并将 DISPLAY 环境变量的主机名部分设为"localhost"。

这可以防止远程主机连接到 proxy display 。

不过某些老旧的X11客户端不能在此配置下正常工作。

为了兼容这些老旧的X11客户端,你可以设为"no"。

12. 打印警告信息和上次登录信息

#PrintMotd yes

指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。

默认值是"yes"。

#PrintLastLog yes

指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。

默认值是"yes"。

#TCPKeepAlive yes

指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes"。

这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。

可以设为"no"关闭这个特性。

13. 禁止使用Login命令

#UseLogin no

是否在交互式会话的登录过程中使用 login(1) 。默认值是"no"。

如果开启此指令,那么 X11Forwarding 将会被禁止,

因为 login(1) 不知道如何处理 xauth(1) cookies 。

需要注意的是,login(1) 是禁止用于远程执行命令的。

如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。

14. 开启ssh创建非特权子进程处理接入请求

#UsePrivilegeSeparation yes

是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离。

默认值是"yes"。

认证成功后,将以该认证用户的身份创建另一个子进程。

这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。

15. 禁止导入变量

#PermitUserEnvironment no

指定是否允许 sshd(8) 处理 ~/.ssh/environment

以及 ~/.ssh/authorized_keys 中的 environment= 选项。

默认值是"no"。

如果设为"yes"可能会导致用户有机会使用某些机制

(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。

#Compression delayed

是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密。

可用值:“yes”, “delayed”(默认), “no”。

#ClientAliveInterval 0

设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,

sshd(8) 将通过安全通道向客户端发送一个"alive"消息,并等候应答。

默认值 0 表示不发送"alive"消息。这个选项仅对SSH-2有效。

#ClientAliveCountMax 3

sshd(8) 在未收到任何客户端回应前最多允许发送多少个"alive"消息。

默认值是 3 。

到达这个上限后,sshd(8) 将强制断开连接、关闭会话。

需要注意的是,"alive"消息与 TCPKeepAlive 有很大差异。

"alive"消息是通过加密连接发送的,因此不会被欺骗;

而 TCPKeepAlive 却是可以被欺骗的。

如果 ClientAliveInterval 被设为 15

并且将 ClientAliveCountMax 保持为默认值,

那么无应答的客户端大约会在45秒后被强制断开。

这个指令仅可以用于SSH-2协议。

16. 禁止连接ssh端口时,返回补丁版本信息

#ShowPatchLevel no

ShowPatchLevel用于在连接ssh端口时,是否返回SSH的补丁版本信息

#UseDNS yes

开启DNS反向解析

UseDNS no #因为这样效率更高

#PidFile /var/run/sshd.pid # 指定sshd进程号保存的文档路径

#MaxStartups 10:30:100 #—> 先10,在30,在100

最大允许保持多少个未认证的连接。默认值是 10 。

到达限制后,将不再接受新连接,除非先前的连接认证成功

或超出 LoginGraceTime 的限制。

MaxStartups 10

#PermitTunnel no

是否允许 tun(4) 设备转发。可用值如下:

“yes”, “point-to-point”(layer 3), “ethernet”(layer 2), “no”(默认)。

“yes"同时蕴含着"point-to-point"和"ethernet”。

#ChrootDirectory none

更改根目录 chroot命令

no default banner path

#Banner none

将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。

默认什么内容也不显示。”none”表示禁用这个特性

override default of no subsystems

Subsystem sftp /usr/libexec/openssh/sftp-server

只支持SSHv2协议

配置一个外部子系统(例如,一个文件传输守护进程)。

值是一个子系统的名字和对应的命令行(含选项和参数)。

比如 ”sft /bin/sftp-server”

Example of overriding settings on a per-user basis

#Match User anoncvs

X11Forwarding no

AllowTcpForwarding no

ForceCommand cvs server

使用Match匹配某个用户,对其进行预设置

引入一个条件块。

块的结尾标志是另一个 Match 指令或者文件结尾。

如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。

Match 的值是一个或多个”条件-模式”对。

可用的”条件”是: User, Group, Host, Address 。

只有下列指令可以在 Match 块中使用:

AllowTcpForwarding

Banner

ForceCommand

GatewayPorts

GSSApiAuthentication

KbdInteractiveAuthentication

KerberosAuthentication

PasswordAuthentication

PermitOpen

PermitRootLogin

RhostsRSAAuthentication

RSAAuthentication

X11DisplayOffset

X11Forwarding

X11UseLocalHost

ForceCommand

强制执行这里指定的命令而忽略客户端提供的任何命令。

这个命令将使用用户的登录shell执行(shell -c)。

这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。

这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的

猜你喜欢

转载自blog.csdn.net/weixin_43214644/article/details/126360069