bash别名和python3 -c命令

voidMainReturn

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

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之后的部分不满意。有人可以帮忙吗?

巴尔玛

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

mfa.py:

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不需要这样做。

然后定义函数:

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()这样就不必要地创建了一个列表,只是将其重新连接为一个长字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章