首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python3 -c命令创建bash别名

使用python3 -c命令创建bash别名
EN

Stack Overflow用户
提问于 2018-07-20 02:58:05
回答 2查看 315关注 0票数 0

我正在尝试通过在我的mac上编写bash别名来缩短获取aws访问令牌并将其写入~/.aws/credentials文件的工作:

代码语言:javascript
复制
alias trial='function mfa(){ aws sts get-session-token --serial-number $2 --token-code $1|python3 -c "import sys,subprocess;obj=eval(''.join(sys.stdin.readlines()).replace('\n',''));AccessKeyId=obj['Credentials']['AccessKeyId'];SecretAccessKey=obj['Credentials']['SecretAccessKey'];SessionToken=obj['Credentials']['SessionToken'];subprocess.check_output('aws configure set aws_access_key_id '+AccessKeyId+' --profile mfa', shell=True);subprocess.check_output('aws configure set aws_secret_access_key '+SecretAccessKey+' --profile mfa', shell=True);subprocess.check_output('aws configure set aws_session_token '+SessionToken+' --profile mfa', shell=True);"};mfa'

但由于某些原因,这并不起作用。具体地说,bash编译器对python3 -c之后的部分不满意。有人能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 04:12:35

不要使用别名,只需将函数命名为mfa即可。并将Python代码放入一个文件中。

mfa.py:

代码语言:javascript
复制
import sys, subprocess, json

obj=json.loads(sys.stdin.read())
AccessKeyId=obj['Credentials']['AccessKeyId']
SecretAccessKey=obj['Credentials']['SecretAccessKey']
SessionToken=obj['Credentials']['SessionToken']
subprocess.check_output(['aws', 'configure', 'set', 'aws_access_key_id', AccessKeyId, '--profile', 'mfa'])
subprocess.check_output(['aws', 'configure', 'set', 'aws_secret_access_key', SecretAccessKey, '--profile', 'mfa'])
subprocess.check_output(['aws', 'configure', 'set', 'aws_session_token', SessionToken, '--profile', 'mfa'])

注意,我给subprocess.check_output提供了一个列表,而不是构造一个字符串,所以不需要shell=True

然后定义函数:

代码语言:javascript
复制
mfa() {
    aws sts get-session-token --serial-number "$2" --token-code "$1" | python /path/to/mfa.py
}

我假设会话令牌是JSON,而不是Python语法,所以我使用json.loads()而不是eval()。要读取所有标准输入,请使用sys.stdin.read()而不是连接readlines();这会创建一个不必要的列表,只是为了将其连接回一个长字符串。

票数 2
EN

Stack Overflow用户

发布于 2018-07-20 05:35:51

感谢大家的回复。最后,我最终将所有内容都放在一个python文件中,如下所示:

代码语言:javascript
复制
import sys, subprocess, json
output = subprocess.Popen('aws sts get-session-token --serial-number sys.argv[2] --token-code '+sys.argv[1], shell=True,stdout=subprocess.PIPE)
output = json.loads(output.communicate()[0].decode('utf-8').strip())
AccessKeyId=output['Credentials']['AccessKeyId']
SecretAccessKey=output['Credentials']['SecretAccessKey']
SessionToken=output['Credentials']['SessionToken']
subprocess.check_output('aws configure set aws_access_key_id '+AccessKeyId+' --profile mfa', shell=True)
subprocess.check_output('aws configure set aws_secret_access_key '+SecretAccessKey+' --profile mfa', shell=True)
subprocess.check_output('aws configure set aws_session_token '+SessionToken+' --profile mfa', shell=True)

然后在bash_profile上我有一个别名:

代码语言:javascript
复制
alias a="python3 ~/bin/python3_mfa.py $1"

这是有效的。但是如果我在别名中放入更多的命令,它就会停止工作。试图弄清楚这一点。例如:

代码语言:javascript
复制
alias a="python3 ~/bin/python3_mfa.py $1;eb ssh env --profile mfa;"

不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51430030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档