类似ssh的shell通过aws ssm

smsh的Python项目详细描述


SMSH

一个命令行实用程序,通过aws ssm api为长时间运行的命令启用类似ssh的交互会话和连续输出。 尽管输出无法通过aws api获得,但该工具仍提供sendcommand操作的连续输出。

安装

目前,smsh仅作为源分发。克隆此存储库,然后使用setuptools构建它:

python setup.py install

交互式使用

smsh只需提供实例id或ip地址,就可以进入交互式shell会话:

smsh i-123450asdf12345

一旦“连接”,就会给用户一个输入提示,类似于shell提示:

[root@demo-instance root]#

实例名将设置为实例的“name”标记,如果未设置名称,则将默认为实例id。 用户可以像远程shell一样与会话交互:

[root@demo-instance root]# ls -al
total 40
dr-xr-x---  3 root root 4096 Mar 15 21:47 .
dr-xr-xr-x 25 root root 4096 Mar 15 18:44 ..
-rw-r--r--  1 root root   18 Jan 15  2011 .bash_logout
-rw-r--r--  1 root root  176 Jan 15  2011 .bash_profile
-rw-r--r--  1 root root  176 Jan 15  2011 .bashrc
-rw-r--r--  1 root root  100 Jan 15  2011 .cshrc
drwx------  2 root root 4096 Mar 14 21:53 .ssh
-rw-r--r--  1 root root  129 Jan 15  2011 .tcshrc
[root@demo-instance root]#

短暂使用

smsh还允许执行单个远程命令。这可以通过提供-c标志来运行:

smsh i-123450asdf12345 -c 'ls -al'

输出将直接打印到控制台。

输出

此工具支持无缓冲输出模式(技术上仍处于缓冲状态),用户可以在其中获得恒定的实时 用于长时间运行的命令的输出,尽管输出不能通过aws api获得。 这是ssm的一个很大的限制。默认情况下,所有smsh输出都是无缓冲的。这个 但是会导致性能问题,因为客户端将不断地轮询实例以获取最新的输出。

通过添加参数--buffered-output,客户端可以在缓冲模式下运行。

由于有接近实时的输出,长时间运行的命令变得更加有用。另外,像tail -f 本机支持。

[root@demo-instance root]# tail -f my.log
long running process Thu Mar 15 21:51:02 UTC 2018!!!!
long running process Thu Mar 15 21:51:03 UTC 2018!!!!
long running process Thu Mar 15 21:51:04 UTC 2018!!!!
long running process Thu Mar 15 21:51:05 UTC 2018!!!!
long running process Thu Mar 15 21:51:06 UTC 2018!!!!
long running process Thu Mar 15 21:51:07 UTC 2018!!!!
long running process Thu Mar 15 21:51:08 UTC 2018!!!!
long running process Thu Mar 15 21:51:09 UTC 2018!!!!
long running process Thu Mar 15 21:51:10 UTC 2018!!!!
long running process Thu Mar 15 21:51:11 UTC 2018!!!!

状态

在交互模式下,会话状态在整个会话期间保持不变。这包括当前工作目录、当前环境 变量(本地和导出的)和当前用户。

root@demo-instance root]# pwd
/root
[root@demo-instance root]# cd /var/log
[root@demo-instance log]# pwd
/var/log
[root@demo-instance log]#

取消命令

在交互模式下,ctrl+c将用ssm api取消任何命令,因此sigterm应该被发送到正在执行的命令 在目标托管实例上。此外,以交互模式或短暂模式向smsh发送sigterm也会导致 在发送到实例的sigterm中。

编辑器

该工具还允许使用本地vi/nano编辑器。就像通常在远程机器上使用它们一样, 他们可以打开现有的或新的文件。但是,由于程序的性质,任何打开的新文件 在编辑器中保存而不包含任何内容时将被丢弃。

[root@demo-instance log]# vi somefile.txt

注意事项

以下是使用此工具的一些注意事项:

  • 此工具轮询。如果一个帐户中有很多用户, 或者如果有许多命令正在执行,那么api调用 可能被节流。此工具尝试执行指数后退 尽量避免这种情况。
  • DescribeCommandInvocation不支持基于标记的权限。所以, 虽然您可以基于标记控制send命令, 任何人都能有效地看到每个命令的输出。
  • ssm限制可以通过send命令发送的脚本大小 行动。在编辑时,此大小限制可能会影响编辑器的使用 非常大的文件。
  • 输出缓冲。即使是无缓冲模式一次也可以缓冲多达100行。 如果输出速度超过此速度,则可以备份该命令。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么我们不能将ArrayList<Integer>传递给具有(Integer…)的方法参数   java Spring RestTemplate映射JSON对映射的响应引发不匹配的PutException   在系统中找到java Selenium元素,但在Jenkins中未找到   java在Android中使用JavaMail API发送电子邮件,而不使用默认/内置应用程序   数组如何在Java数据结构中同时存储数字和相应的单词?   为什么“+”运算符未定义?JAVA   java如何在游戏中添加高分系统?   java在球门碰撞中区分球和球员   java如何使用SpringSecurity4.0.1使用Auth令牌实现Rest完整Web服务。释放   java如何解决这个错误:Android资源链接失败?   java多线程文件处理和数据库批插入   导致Tomcat失败的java无用块线程   java主线程做了太多的工作,尽管我使用了异步线程(laggy UI)   在Java FX 2.0中滚动锚定节点时,锚定始终可见?   java使用EJB3中的客户机jar和设计模式