cshamrick / stsauth Goto Github PK
View Code? Open in Web Editor NEWA CLI tool that allows easy generation of AWS credentials using STS, ADFS, and Active Directory.
License: MIT License
A CLI tool that allows easy generation of AWS credentials using STS, ADFS, and Active Directory.
License: MIT License
Credentials for the following profile are still valid:
~~~~~~~~~~~
Would you like to continue? [y/N]: y
Traceback (most recent call last):
File "/home/jbpratt/.local/bin/stsauth", line 8, in <module>
sys.exit(cli())
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/jbpratt/.local/lib/python3.8/site-packages/sts_auth/cli.py", line 84, in authenticate
saml_response = sts_auth.get_saml_response()
File "/home/jbpratt/.local/lib/python3.8/site-packages/sts_auth/stsauth.py", line 161, in get_saml_response
form_response = self.authenticate_to_adfs_portal(response)
File "/home/jbpratt/.local/lib/python3.8/site-packages/sts_auth/stsauth.py", line 221, in authenticate_to_adfs_portal
if login_error_message and len(login_error_message.string) > 0:
TypeError: object of type 'NoneType' has no len()
Hi @cshamrick / @phillipjf ,
I'm trying to upgrade my stsauth package to version 0.2.4
. However, I have found that stsauth
requires python-click < 7
and python-rsa < 4
which are no longer officially supported in Arch Linux.
Both dependencies released a major version last month, and I wonder if it would possible to include support for them:
python-rsa
release history: https://pypi.org/project/rsa/#historypython-click
release history: https://pypi.org/project/click/#historyThank you!
P.S: On a side note, I've noticed that version 0.2.0
shows as the latest version at https://github.com/cshamrick/stsauth/releases It's nothing really important, but I thought you might want to fix it.
Hi,
I'm having issues to authenticate using statauth
since version 0.3.5
which is the most recent version that still works for me. I've tried with versions 0.3.7
, 0.3.8
and 0.3.9
, and all of them fail to show the account selection.
This is what I get with 0.3.5
which works good:
[musikolo@Thinkpad ~]$ stsauth -v DEBUG authenticate -u musikolo -k "mycompany"
Password:
debug: Found 'default' section in '/home/musikolo/.aws/credentials'!
debug: Attribute 'region' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'output' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'idpentryurl' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'domain' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'okta_shared_secret' not set, using value from '/home/musikolo/.aws/credentials'
debug: No response provided. Fetching IDP Entry URL...
debug: No SAML assertion found in response. Attempting to log in...
debug: Adding value for 'UserName' to Login Form payload.
debug: Adding value for 'Password' to Login Form payload.
debug: Adding value for 'Kmsi' to Login Form payload.
debug: Adding value for 'AuthMethod' to Login Form payload.
debug: Adding value for 'AuthMethod' to Login Form payload.
debug: Posting login data to URL: https://adfs.mycompany.com:443/signon.aspx?loginToRp=urn:amazon:webservices&client-request-id=26ab7fa8-8ac4-4f67-1905-0080000400dd
debug: No SAML assertion found in response. Attempting to log in...
debug: Found state_token:
debug: Current Verification Status: success.
debug: Okta portal already authenticated, passing through...
debug: Posting data to url: https://adfs.mycompany.com:443/signon.aspx?loginToRp=urn:amazon:webservices&client-request-id=26ab7fa8-8ac4-4f67-1905-0080000400dd
debug: [('Context', '8zlQPOb0wgZcmKonwtp9o4JyL1lJ1EnqR_oqfXVdAGgAAQAAeN8BhNmuhnl8uPmTWKMjyQp6yjAedXRkm4dyGoxDxxRQOlbASTUJsn13bPNcQF9hmtvtXghhYDSZSBc4SDD71kZKXy9CJoPCzxJQnvAsPC6L1jZjXjz7OIFQk7ZCFZunwCyIj1VUEVaV5LnUW3OfBnyVfe5oJqS-nHHkVPeuXCkfIeDxyluCkFyT_t1yWXj22JQYKO9kYPtlDBOj5h25QTDCTb44A4maEmoLkxULSd1Ce5hcgwQ1qtUTJ2n40eHuNGh_iP-bs6in1yTD8sUSok2lY3jS0RpSldpSsjPX-7udb7F0GC_-aOed_20nAmISfs9HZ_MuVXVOtCICFYeYQuADAAAYnR-gSN3nc-wab5A033f0ZWvqT7dpiu8MqVx-KoBF0hiVFyeey3hwVmNKo47aTcm4JyNn-mmQ9m9KNtnd09NVljPlfo6TeOOyHC6pfrZPc1RGVwIsvxuJ90BzZMIbOuOsBlH1ZUd0EOu437EkSRX6XVg8dJSrnz3KJFIKxF-iYLZXP8nPtCiUSBCDIL0hWeeBSlia1PQ5j3bxaEJ8GtejmhhdjNoYIZXm92JurVMxUxF9lYaJuj4a38M4nkHDqDyYYDT3zujhQJefmrDHVHaNiOKtQhRx_stk3bfloJlIdzPJFRda-AiB3Vo5nsYHHwfSjTxm_-lxi5mW5kz72inL0fSQhnIc-EQGcjeKQ4RKfF03gxa_pP4FYfZ74pS3dclJH_nAF9ZmCyRSqaYsJ8PQ0UAaKMPc05SULemRLN9U7OcfJZpBmDKbkosyfv6c_LU6AKOFs-cojYnoCIz_BQuKDtqtMkRUtrecV0tuCUXRB7N7Zc-1ppkyGsr_zcavLnC6LqWfqsk78OMYEFDknSc-OPGNvI8oebY3yqk07sqU8P6tk6gvZenzQIxJ3Y5_H7i0PKD4xq3izjjqsCcVlZujxo3JcdaDreiLma1PrNx-WgMRy9bokv2cEGm9lMmt6zwxYyQTPeFB9d1uy1RN9ROpSePNxShVqc9xZDZEmADjyV2l3Rw2X3qv7SsGa4yui6KlgooXMS7Yq9Ri8-bcbi6pvlWv_trm-CRm56FfRpK9qRcmzJWLuVNL-FLfXsCkGlmU5LHhT90kqqXmr-na1vl_TH6uxGJSWKgeIlkVzscrD9tRR1c5w7eTT0FHU9c1GDfRe1-lX75HUDVYN_nXegF18z7UdRPymtQKCL_aSCTXjVkEX3H47UUvfNGlZ8ErFdWj_XT0dfCG9MqFSNf58amTtCKJj1IGlAfXr_cbj0g_mNvZ9gotlV0LKNY3vo40EytE6ZniMnfG1ES6bqlzl4IGwZyPVL0yFJV3Qf2CsVzocE-Pj3BNGDMStDVLzQHlMw30bYTMf4knkWyhkASJi9cTg_8fHW98Nl7tCY_rly93ygQg8utXszjDsJ7OORHXlRLsYXip0HwBGrW4J_6THA6dyCWQIa_iEirivzB4PbLa6AY7JVeGL1896_lyUrPlMpAXV4aUTlGL92cegr06iASmkcYgRrisUQ_j2C6xZQQ93_D5I-CFBWUIZeoNcuwoJvDe_x1LKdmzSUfh6gK3-hX7IWpPt1b8i0bnl0PVByVUs5POweiEZZf6V5_9Cpfy5YH7pJrPEf8NHqLSFH55gkFSMtxOAzdJwVcCQKa_dTkr3w.Zq5me9gMlp-vIKDOiDuJgOzJ5oZ-3vvC5qwkCJJ1jeAO1ktMk-0538eDzGlc1BUPqIZ6FN6cu1dAbd5OuAd9AUARQE5alvy5IgujHmMFNwCrJ35zzFjTS8H9izXQ5E3RxQTCoEBQzYNMwxUWX0uF1EC9m17SQUC-C2BFNFZEtr2x6XdMo2zYHdVGGWpUu836ThhE8Ccp5KSTiFvsQKx36wpRnm-jXevw41VrxegBAazSOQDtwUnVBcUd3FVjfbr8XhvyXqDYvjOIyw82WvTKF2Zc0jeA25Xa1IVkce46c_KOOgKeqDFUXDWwARqrJewHEtJdlZrJB-pkNkxBQNVPgw'), ('AuthMethod', 'OktaMfaAdfs'), ('ErrorMessage', None)]
Please choose the role you would like to assume:
Account 123456789001:
[0]: PROD-ReadOnly
Account 123456789002:
[1]: DEV-DEVELOPER
Selection:
This is what I get with 0.3.9
(same as with 0.3.7
and 0.3.8
) which doesn't work:
[musikolo@Thinkpad ~]$ stsauth -v DEBUG authenticate -u musikolo -k "mycompany"
Password:
debug: Found 'default' section in '/home/musikolo/.aws/credentials'!
debug: Attribute 'region' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'output' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'idpentryurl' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'domain' not set, using value from '/home/musikolo/.aws/credentials'
debug: Attribute 'okta_shared_secret' not set, using value from '/home/musikolo/.aws/credentials'
debug: No response provided. Fetching IDP Entry URL...
debug: No SAML assertion found in response. Attempting to log in...
debug: Adding value for 'UserName' to Login Form payload.
debug: Adding value for 'Password' to Login Form payload.
debug: Adding value for 'Kmsi' to Login Form payload.
debug: Adding value for 'AuthMethod' to Login Form payload.
debug: Adding value for 'AuthMethod' to Login Form payload.
debug: Posting login data to URL: https://adfs.mycompany.com:443/signon.aspx?loginToRp=urn:amazon:webservices&client-request-id=69c0bbb0-8055-459d-6912-0080000400fb
debug: No SAML assertion found in response. Attempting to log in...
debug: Found state_token:
debug: Current Verification Status: success.
debug: Okta portal already authenticated, passing through...
debug: Posting data to url: https://adfs.mycompany.com:443/signon.aspx?loginToRp=urn:amazon:webservices&client-request-id=69c0bbb0-8055-459d-6912-0080000400fb
debug: [('Context', '8zlQPOb0wgZcmKonwtp9o4JyL1lJ1EnqR_oqfXVdAGgAAQAAWMEwXXsnWX96Xp6m0VyvudJcRqb3aEk-dwtJ6DFqteIp43h0JG6O9WvoMyk3Pje9ioq2h2w0PGjObXcIeoZ3V7Kg2DnELZ3fi5fGQAC3YVIDp-YxQWjqsJisuYR9VUsqaFQUszxjWVPNdKmJE2Cnn5zvQ22rvvd9q28bs8uoeF0uuQEyiEF5Rupju3g5Goe2o0d7drC0cqMsqTi6Bmrp-TbDSEgB51RZ1i67B34iTuBiNtzj_IGmbgvH70c6I7vUB0E4UusqXxvlJ2_D_waVjqM-vOEDILTspIBZG8HI1mMQRzNORoMQrQhge1oOojhRD1dACf8Jt82mT568e814_OADAADLiWeI9POqAbZiucCrsBojk4fZaEIkoEL4kADxau14FfKQFHayjGGkRmwst3rpk3lPT3nu8X_EbWawJ9szc4gsS8miIjmMAkgReKnc5AockSijkdV3cjr40sN2rQmQ86fpBEVqoEE4S6tNCrE3_5IbX5_Vjsc-97R55PbqEvshLLGAs-JPxtw4qm93exlVPgk2KUeR6M5HMQXdmlBzC3MrXrpcgCBU2k83AXeJFNQ4yzGP1NqzfPE6cdXO308Ion2VzCMjCAG4Cbmq4hBTcUJWyAPMRS7yiOlrMzeH2rAl0LEZyUSc8o7Yqd9qejdP1WtXg4SOei-uhEK1cX-u3aEI4UhKmzwi3yDYW7Qe5OocBQZpLlwnPLYqhzOO3TNqIYnkmlyuWYlzbSuGSeaoKu177Scy6On0fhIE0UXi5YElEA_oIDeWi4l16zmSJnldaXNh3Igw7oTqFHYfpLLkBQHN9gK5Ed-6xUVUiUjmzA3PFgjzUoHoK20mCqELSWVHgdRfLD_LBnY0dFVRAiGtNSQVbg5CVEnS9OvB-Q_zuhYyOAwF1wU6XXSjI1HoDMC8U63rlE2gqTgObR3HqFqBYnLIil49f8c_ybixVkI65lkfKyqcwCENFg0vXS3t65xg7ELZOZS-ySC-NceKcNX4UJr_XawRWpNoXmu_31BMKXpfFhoptqfcdbjAQPvXX931nm12JOC3oMVNkOcv8eiSTLMac7axzVPFEtGPI7jS2cURdcG4BiZpc8pYpTlghpBCuO1L5IlNJTbBwL9dLbdMFnj-ryWYvsUkife6plwZTeanGuHG5nJVqvgKcakXFC3qiM8wOIFLJWJW0roD0R21jB40m54rk9r1kM9hAMZH4B0uYf_O3gK3MOLkO57GQGnjTK4uQAEI2DU-RNwlSTvXAvH4Q4gptz1Ifo5lnLzE_lI_RJF-BuyVos7qhszKTgkZqPAP7aqITuefaozFnZRXjCD9SjQ_P58RGd-JqXEoczvYN5OOC9j1SSMWqL2n6sPrNo_lHyBauhFAn7iCeVWLqn257PRqb5zM7B0lB8KGyl04KmQJHhm19uRf0bP4RJx8HpFwowplDOzG9UiEZn63TJGh0mYI0XKxIE8n4SJkF1irL1MAuhtHjhZnaNscEJHMYAmWWIPtLnRkKEso5JBWnc0GQfrKINuBkEhi2irk3neIiVi4rIz-SQ5mIZZxcpdhCLiCneA9oaFrtXrmy3JpsbUF0zcjQNaeptCTlDmvkW6ie20oQ_a5lSmbdEg7NHkzeLfR3CA8kWZZ6kDJUJFdohpYeDQCiqd87rOFYB_6yeJ3mw.hSlJDWvePIBGVfcueqZcxyHvaDrAhNgW2a8_Yx73Wt3unYzXebkuj2zQishogGDNfWdNCmUZvPvP65OW0Ku4HRPsUBLaEWfswpjoYshTYH1ZwjtAetjDYQrRqKSF8wvS4sUEK4IcrbbQS47C9d4ZQt0Q3Mw6wl02Ld1UrkwTPP3Rb62g3TtLTuFCn5Xeg-HMaa0ozr-O68OiQmyEjEaOLuZAi7ssVAEKbrWW-x0n1yaGtnfau0KU3P3lYVgPbWkwrf7nvmMV8egmMveWOYuNB_YdotinwPldIOblmi4lo0_e5UCitb0rRYzO1JK5EtYyyWDMKOsWJ-trsspjRRk1_w'), ('AuthMethod', 'OktaMfaAdfs'), ('ErrorMessage', None)]
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/urllib3/connection.py", line 159, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "/usr/lib/python3.7/site-packages/urllib3/util/connection.py", line 80, in create_connection
raise err
File "/usr/lib/python3.7/site-packages/urllib3/util/connection.py", line 70, in create_connection
sock.connect(sa)
TimeoutError: [Errno 110] Connection timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3.7/site-packages/urllib3/connectionpool.py", line 343, in _make_request
self._validate_conn(conn)
File "/usr/lib/python3.7/site-packages/urllib3/connectionpool.py", line 839, in _validate_conn
conn.connect()
File "/usr/lib/python3.7/site-packages/urllib3/connection.py", line 301, in connect
conn = self._new_conn()
File "/usr/lib/python3.7/site-packages/urllib3/connection.py", line 168, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7f94ff8fbcc0>: Failed to establish a new connection: [Errno 110] Connection timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/lib/python3.7/site-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3.7/site-packages/urllib3/util/retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='signin.aws.amazon.com', port=443): Max retries exceeded with url: /saml (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f94ff8fbcc0>: Failed to establish a new connection: [Errno 110] Connection timed out'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/stsauth", line 10, in <module>
sys.exit(cli())
File "/usr/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/usr/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/usr/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3.7/site-packages/sts_auth/cli.py", line 75, in authenticate
adfs_response = sts_auth.fetch_aws_account_names(saml_response)
File "/usr/lib/python3.7/site-packages/sts_auth/stsauth.py", line 289, in fetch_aws_account_names
adfs_response = self.session.post(hiddenform.attrs.get('action'), data=data, headers=headers)
File "/usr/lib/python3.7/site-packages/requests/sessions.py", line 581, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/usr/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.7/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='signin.aws.amazon.com', port=443): Max retries exceeded with url: /saml (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f94ff8fbcc0>: Failed to establish a new connection: [Errno 110] Connection timed out'))
I'm using Arch Linux, and I'm not sure if there a missing requirement or anything wrong on my side. However, it's strange it still works with 0.3.5
, but it doesn't with any newer version.
Please, let me know if you need me to do any test or provide additional info.
Thank you!
Hi,
This is not an issue, just a question. I don't know about any better place where to ask it.
Do you have any plan to release versions? I think that would be very nice and help better track when a version is done version in progress. Thoughts?
Thank you!
Describe the bug
The output with choices of text|json|table
are not being respected
To Reproduce
stsauth authenticate -o json
Expected behavior
A json object of the resulting variable
Describe the bug
After selecting an account profile, credentials are requested then an exception is raised
It seems this happens when authenticating to an account that already exists in the credentials file, when deleting the None
, I am able to authenticate, with it then writing None
, and it does not happen to accounts I have never authenticated to before.
Expected behavior
Credentials are requested
Traceback (most recent call last):
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/configloader.py", line 149, in raw_config_parse
cp.read([path])
File "/usr/lib/python3.8/configparser.py", line 697, in read
self._read(fp, filename)
File "/usr/lib/python3.8/configparser.py", line 1067, in _read
raise DuplicateSectionError(sectname, fpname,
configparser.DuplicateSectionError: While reading from '/home/jbpratt/.aws/credentials' [line 103]: section 'None' already exists
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/jbpratt/.local/bin/stsauth", line 8, in <module>
sys.exit(cli())
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/jbpratt/.local/lib/python3.8/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/jbpratt/.local/lib/python3.8/site-packages/sts_auth/cli.py", line 129, in authenticate
token = sts_auth.fetch_aws_sts_token(role_arn, principal_arn, saml_response.assertion, aws_profile=profile)
File "/home/jbpratt/.local/lib/python3.8/site-packages/sts_auth/stsauth.py", line 240, in fetch_aws_sts_token
raise e
File "/home/jbpratt/.local/lib/python3.8/site-packages/sts_auth/stsauth.py", line 233, in fetch_aws_sts_token
session = boto3.Session(profile_name=aws_profile)
File "/home/jbpratt/.local/lib/python3.8/site-packages/boto3/session.py", line 80, in __init__
self._setup_loader()
File "/home/jbpratt/.local/lib/python3.8/site-packages/boto3/session.py", line 120, in _setup_loader
self._loader = self._session.get_component('data_loader')
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 682, in get_component
return self._components.get_component(name)
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 919, in get_component
self._components[name] = factory()
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 155, in <lambda>
lambda: create_loader(self.get_config_variable('data_path')))
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 237, in get_config_variable
return self.get_component('config_store').get_config_variable(
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/configprovider.py", line 293, in get_config_variable
return provider.provide()
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/configprovider.py", line 390, in provide
value = provider.provide()
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/configprovider.py", line 451, in provide
scoped_config = self._session.get_scoped_config()
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 327, in get_scoped_config
profile_map = self._build_profile_map()
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 223, in _build_profile_map
self._profile_map = self.full_config['profiles']
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/session.py", line 364, in full_config
cred_profiles = botocore.configloader.raw_config_parse(
File "/home/jbpratt/.local/lib/python3.8/site-packages/botocore/configloader.py", line 151, in raw_config_parse
raise botocore.exceptions.ConfigParseError(
botocore.exceptions.ConfigParseError: Unable to parse config file: /home/jbpratt/.aws/credentials
~/work tail ~/.aws/credentials
[None]
[None]
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.