{"id":21051296,"url":"https://github.com/ktont/iterm2-session","last_synced_at":"2025-08-19T01:03:49.635Z","repository":{"id":143933297,"uuid":"247127024","full_name":"ktont/iterm2-session","owner":"ktont","description":"iterm2 session manager, jump server","archived":false,"fork":false,"pushed_at":"2020-05-28T08:36:44.000Z","size":198,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T15:43:47.633Z","etag":null,"topics":["iterm2","jumpbox","jumpserver","proxy-server","session-management","session-manager"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ktont.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-13T17:29:59.000Z","updated_at":"2025-01-16T13:30:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"d0c9fda2-b2c4-40cc-942a-423320bc95ad","html_url":"https://github.com/ktont/iterm2-session","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ktont/iterm2-session","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktont%2Fiterm2-session","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktont%2Fiterm2-session/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktont%2Fiterm2-session/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktont%2Fiterm2-session/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ktont","download_url":"https://codeload.github.com/ktont/iterm2-session/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktont%2Fiterm2-session/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271083357,"owners_count":24696276,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iterm2","jumpbox","jumpserver","proxy-server","session-management","session-manager"],"created_at":"2024-11-19T15:52:19.339Z","updated_at":"2025-08-19T01:03:49.598Z","avatar_url":"https://github.com/ktont.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"项目介绍\n=====================\niterm2 的 session manager\n\n平时要登陆公司堡垒机，跳转部门服务器，再跳转到一些设备上，进行操作和传送文件。\n进行的操作一般是重复的一些命令，传送的文件一般是小文件。\n\niterm2 和 SecureCRT 都有用，iterm2 的终端显示好一些、rz/sz 文件传送准确性高，而 SecureCRT 的 session manager、button bar 比较好用。\n\n一直在寻找 iterm2 上的 session manager 方法，就像 SecureCRT 那样的。把两者融合起来。\n\n\niterm2 的 Profile 功能可以配置成 session manager，又发现 iterm2 的 Trigger 功能支持 rz/sz。于是，实现了自动登陆、自动跳转。\n\n这事儿就成了，因此这个方案是三项技术的组合\n\n* iterm2 的 Profile\n* iterm2 的 Trigger\n* iterm2-session（自动登陆、自动跳转）\n\n# 安装\n\n下面的教程是 Hello world，设置一个最简单的Profile\n\n效果图如下\n\n![](_images/final.png)\n\n当你点击其中一个条目时，会自动登陆。\n如下图\n\n![](_images/session56.png)\n\n\n## 1. 安装 iterm2-session\n\n找一个目录用来存放程序和配置文件，比如 `~/iterm2-session`\n\n```\ngit clone https://github.com/ktont/iterm2-session ~/iterm2-session\n```\n\n写一个配置文件，比如 192.168.1.1.json\n\n```\ncd ~/iterm2-session\ncat \u003c\u003cEOF \u003e 192.168.1.1.json\n{\n    \"protocol\": \"ssh\",\n    \"host\": \"root@192.168.1.1\",\n    \"password\": \"123456\"\n}\nEOF\n```\n\n\n## 2. 创建 Profile\n\niterm2 -\u003e Preferences -\u003e Profiles -\u003e 选中Default -\u003e Other Actions... -\u003e Duplicate Profile\n\n如下图所示\n\n![](_images/duplicate.png)\n\n\n配置 Name、Title、Command、Directory，其中 Command 必须是 `Login Shell`，Directory 必须是 `~/iterm2-session`\n\n如下图所示\n\n![](_images/profile.png)\n\n* Command `Login Shell`, 意思是创建一个独立的终端\n* Directory `~/iterm2-session`，相当于设定工作目录。这个很重要。\n* send text as start `./jump.sh 192.168.1.1.json`, 意思是执行这个命令，注意要指定当前目录。\n\n此时，一个最简的 profile 就完成了，在 iterm2 中，快捷键 COMMAND+O，然后双击 `192.168.1.1` 就会去自动登陆 \n\n# 传输文件支持\n\n通过堡垒机跳转的机器，无法使用 scp 传文件。如果只有 telnet，也不能传文件。\n\n就算有 scp，也没有 rz/sz 用起来方便，所以 rz/sz 几乎是必选功能。\n\n这是一个第三方的方案 `iterm2-zmodem`，请使用下面的教程进行安装\nhttps://github.com/aikuyun/iterm2-zmodem\n\n安装好后，不用自动登陆，手工登陆一台服务器测试，确保 rz/sz 可以工作。\n\n## 配置模版\n请新建一个 Profile，把 iterm2-zmodem 的 trigger 配置好后，当做一个模版。\n每次新增配置的时候，复制这份模版即可。\n\n\u003e iterm2 -\u003e Preferences -\u003e Profiles -\u003e 选中Default -\u003e Other Actions... -\u003e Duplicate Profile\n\n这个动作有快捷键 COMMAND+=\n\n当你使用 rz/sz 时，发现一个 Profile 没有设置 trigger。不要犹豫，立即删除它，然后从 Default 复制一份，填上名称即可。\n\n## 关于tmux、screen\ntmux 和 screen 下，无法使用 rz/sz。\n\n# 使用手册\n\n## 典型场景\n\n当你管理成百上千台机器的时候，不可能创建那么多配置文件。那么，可以使用变量替换。\n\n```\n{\n    \"protocol\": \"ssh\",\n    \"host\": \"user@jump-server.corp.com\",\n    \"password\": \"123456\",\n    \"jump\": {\n        \"protocol\": \"telnet\",\n        \"user\": \"root\",\n        \"host\": \"\u0026\u0026\u0026\",\n        \"password\": \"123456\"\n    }\n}\n\n```\n\n对于 `host`，当它是 \u0026\u0026\u0026 的时候，程序会停下来等待你输入一个机器的地址（hostname或者ip）。\n\n\n## 所有功能\n上面介绍的几个例子，只是 iterm2-session 的一小部分功能。这里列出它的所有功能。\n\n一个尽可能复杂的配置是这样的\n```\n{\n    \"protocol\": \"ssh\",\n    \"user\": \"your-name\",\n    \"host\": \"jump-server.corp.com\",\n    \"port\": 2222,\n    \"password\": [\"blabla1\", \"blabla2\"],\n    \"zmodem\": true,\n    \"command\": \"uname -a\",\n    \"jump\": {\n        \"protocol\": \"ssh\",\n        \"host\": \"public@10.3.4.5\",\n        \"password\": \"admin\",\n        \"sudo\": true,\n        # run `m`, list your favourite hosts. Copy \u0026 Paste someone.\n        \"menu\": [\n            \"telnet 192.168.1.1\",\n            \"telnet 192.168.1.2\",\n            \"telnet 192.168.1.3\"\n        ],\n        \"jump\": {\n            \"protocol\": \"telnet\",\n            \"host\": \"root@192.168.1.1:3333\",\n            \"command\": [\"cd /data\", \"ls -l\"],\n            # run `m`, list your favourite paths\n            \"menu\": [\n                \"cd /data/app/logs/\",\n                \"cd /usr/local/your-app/\",\n                \"cd /var/logs\"\n            ]\n        }\n    }\n}\n```\n\n这个例子实际进行的操作如下：\n* 支持 zmodem 传文件\n* 登陆堡垒机 jump-server.corp.com\n* 依次尝试 两个密码，直到成功\n* 登陆成功后，执行命令 uname -a\n* 第二跳，跳转到 10.3.4.5\n* 登陆成功后，执行sudo -s，并且在 10.3.4.5 上生成一个 m 命令，m 命令会打印你常用的机器列表\n* 第三跳，跳转到 192.168.1.1，这次是 telnet\n* 登陆成功后，执行两个命令 cd /data 和 ls -l，并且在 192.168.1.1 上生成一个 m 命令，m 命令会打印你常用的位置\n\n再补充几点说明\n* 这个 json 文件支持注释\n* 密码的个数没有限制，登陆会重试直至成功\n* 程序会自动添加空密码，就是空字符串\n* 如果sodu需要密码，就在你提供的密码中重试直到成功，和登陆重试一样\n* ssh 和 telnet 都可以使用 user@host:port 的 schema\n* 如果同时指定了 user 选项和 user@host，那么行为未知\n* 如果同时指定了 port 选项和 host:port，那么行为未知\n* 跳转的层级无限制，不过一般就 1 跳\n* command 和 password 和 menu 可以是数组\n\n## 再PS\n\n下面是一些高级用法，需要你添加规则\n\n### 关于token\n\n更注重安全的公司的堡垒机上会有 token 认证。\n本程序遇到 token 认证时，会睡眠 60 秒，等待你输入 token。\n目前只识别 `token:` 或者 `Token:` 这样的字样。\n如果贵司的 token 提示不同，请自行修改 expect 脚本。\n\n### 关于telnet\n\n很多设备的 telnet 是定制的，特别是厂商自研的网络设备。\n本程序只考虑了 `Username:` `login:` 这种提示。\n如果你发现有不同的提示，请自行修改 expect 脚本。\n\n### 关于Password Manager\niterm2 下 ALT+COMMAND+F 会唤出密码管理器，这个功能和 SecureCRT 的 button bar 类似。\n本文一开始也提到了这个 button bar，它是一个很好用的小工具，用来发送密码。\n\n### 关于zmodem的字符集问题\niterm2-session 用了 tcl/expect 工具，因为字符集的原因，这个工具和 trigger 不能很好的配合。\n\niterm2-session 默认在目标服务器上会重设字符集，以防字符集混乱。这么做和 rz/sz 有关。\n\n使用 `zmodem false` 选项，可以不重设字符集。不过，zmodem false可能导致 rz/sz 不能正常工作。\n\n比如\n```\n{\n    \"protocol\": \"ssh\",\n    \"host\": \"root@192.168.1.1\",\n    \"password\": \"123456\",\n    \"zmodem\": false\n}\n```\n\n# linux\n虽然，初衷是为了搭配 iterm2 使用，但是本程序也可以做一个命令行工具使用，跑在类 linux 环境下。\n\n安装方法\n\n```\ncd /usr/local\ngit clone https://github.com/ktont/iterm2-session\nln -s /usr/local/iterm2-session/jump.sh /usr/local/bin/\n```\n\n使用方法\n```\njump.sh 192.168.1.1.json\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fktont%2Fiterm2-session","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fktont%2Fiterm2-session","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fktont%2Fiterm2-session/lists"}