securecrt克隆会话与sshd 的 MaxSessions

简介: 使用securecrt克隆会话时,原有会话连接的session数会自增。 例如 要使用ssh连接,sshd的MaxSessions必须>=1,默认是10。 如果把MaxSessions改成2,那么对同一个ssh连接,只能克隆1个,(克隆出来的ssh可以再克隆,但是对同一个会

使用securecrt克隆会话时,原有会话连接的session数会自增。

例如

screenshot

要使用ssh连接,sshd的MaxSessions必须>=1,默认是10。

如果把MaxSessions改成2,那么对同一个ssh连接,只能克隆1个,(克隆出来的ssh连接窗可以再克隆,但是对同一个连接窗只能克隆一个会话)

screenshot

/var/log/secure中的报错

sshd[11318]: error: no more sessions

代码
新建的会话,消耗一个session计数,如果在当前会话中新建会话,就会继续消耗当前会话的会话数。
如果消耗的会话数大于设置的maxsessions,则报错。
openssh session.c

Session *
session_new(void)
{
        Session *s, *tmp;

        if (sessions_first_unused == -1) {
                if (sessions_nalloc >= options.max_sessions)
                        return NULL;
                debug2("%s: allocate (allocated %d max %d)",
                    __func__, sessions_nalloc, options.max_sessions);
                tmp = xrealloc(sessions, sessions_nalloc + 1,
                    sizeof(*sessions));
                if (tmp == NULL) {
                        error("%s: cannot allocate %d sessions",
                            __func__, sessions_nalloc + 1);
                        return NULL;
                }
                sessions = tmp;
                session_unused(sessions_nalloc++);
        }

        if (sessions_first_unused >= sessions_nalloc ||
            sessions_first_unused < 0) {
                fatal("%s: insane first_unused %d max %d nalloc %d",
                    __func__, sessions_first_unused, options.max_sessions,
                    sessions_nalloc);
        }

        s = &sessions[sessions_first_unused];
        if (s->used) {
                fatal("%s: session %d already used",
                    __func__, sessions_first_unused);
        }
        sessions_first_unused = s->next_unused;
        s->used = 1;
        s->next_unused = -1;
        debug("session_new: session %d", s->self);

        return s;
}


/*
 * Prepares for an interactive session.  This is called after the user has
 * been successfully authenticated.  During this message exchange, pseudo
 * terminals are allocated, X11, TCP/IP, and authentication agent forwardings
 * are requested, etc.
 */
static void
do_authenticated1(Authctxt *authctxt)
{
...
        s = session_new();
        if (s == NULL) {
                error("no more sessions");  //session_new失败,报错
                return;
        }
...

参考
http://unix.stackexchange.com/questions/26170/sshd-config-maxsessions-parameter
/usr/src/debug/openssh-6.4p1/sessions.c

目录
相关文章
|
消息中间件 Kubernetes NoSQL
Linux时间校准(ntpdate及NTP客户端代码校准示例)
Linux时间校准(ntpdate及NTP客户端代码校准示例)
|
存储 OLAP OLTP
漫谈OceanBase 列式存储
列式存储主要的目的有两个: 大部分OLAP查询只需要读取部分列而不是全部列数据,列式存储可以避免读取无用数据; 将同一列的数据在物理上存放在一起,能够极大地提高数据压缩率。 OLAP和OLTP OLAP,也叫联机分析处理(Online Analytical Processing)系统,有的时候也叫DSS决策支持系统,就是我们说的数据仓库。
6970 0
|
6月前
|
人工智能 安全 API
OpenClaw Skills终极指南:零技术部署+解锁5700+全场景Skill+阿里云百炼API配置及常见问题
2026年初,OpenClaw(昵称“小龙虾”)以72小时狂揽6万+ GitHub Stars的速度爆红,如今星标数已突破22万,不仅带动Mac Mini全球热销,更成为AI自动化领域的现象级工具。但很多用户部署后却陷入困惑:“明明是同款工具,别人的能自动办公、写代码、做调研,我的却只能简单聊天?”
1068 3
|
新零售 架构师 Devops
如何衡量研发效能?阿里资深技术专家提出了5组指标
3月16日-17日,何勉老师将和阿里研发效能其他讲师一起在上海为我们分享《企业数字化转型面临的研发效能挑战—阿里DevOps体系和实践》课程,有关于阿里DevOps体系知识都可以从他们那里得到答案。
19012 116
|
Oracle Java 关系型数据库
oracle实现主键自增长及自动生成策略
oracle实现主键自增长及自动生成策略
918 0
|
Prometheus Kubernetes 监控
NVIDIA GPU Operator分析六:NVIDIA GPU Operator原理分析
背景我们知道,如果在Kubernetes中支持GPU设备调度,需要做如下的工作:节点上安装nvidia驱动节点上安装nvidia-docker集群部署gpu device plugin,用于为调度到该节点的pod分配GPU设备。除此之外,如果你需要监控集群GPU资源使用情况,你可能还需要安装DCCM exporter结合Prometheus输出GPU资源监控信息。要安装和管理这么多的组件,对于运维
3855 0
|
传感器 开发工具 vr&ar
ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
|
数据库 Docker 容器
JumpServer——版本升级
JumpServer——版本升级
548 0
|
XML SQL 自然语言处理
JDK 21中的字符串模板:提升代码可读性与维护性的新利器
本文将介绍JDK 21中引入的字符串模板特性,它是一种创新的文本生成技术,旨在提高代码的可读性和维护性。字符串模板允许开发者使用简洁的语法来构建复杂的字符串,减少了硬编码和字符串拼接的工作量。本文将详细阐述字符串模板的语法、使用场景以及与传统字符串处理方法的比较,并通过示例代码展示其在实际开发中的应用。
1014 1

热门文章

最新文章