类似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行。 如果输出速度超过此速度,则可以备份该命令。