Следующий код с использованием Docker Python SDK выполняется успешно:
import boto3
import os
import docker
from subprocess import PIPE, Popen
## Get key and secret from System Environment Variables
aws_key = os.getenv("AWS_ACCESS_KEY")
aws_secret = os.getenv("AWS_SECRET_KEY")
ecr_client = boto3.client('ecr', aws_access_key_id = aws_key, aws_secret_access_key = aws_secret)
authToken = ecr_client.get_authorization_token()['authorizationData'][0]['authorizationToken']
ecr_username, ecr_password = base64.b64decode(authToken).decode().split(':')
registry = ecr_client.get_authorization_token()['authorizationData'][0]['proxyEndpoint']
dockerclient = docker.from_env()
dockerclient.login(
username=ecr_username,
password=ecr_password,
registry=registry)
и выдает следующий вывод:
{'IdentityToken': '', 'Status': 'Login Succeeded'}
Следующий код также использует AWS Tools для PowerShellработает успешно при запуске непосредственно с компьютера с Windows 10.
awsEcrLoginCmd = """
Set-AWSCredentials -AccessKey {} -SecretKey {};
Invoke-Expression -Command (Get-ECRLoginCommand -Region us-east-1).Command
""".format(aws_key, aws_secret)
process = Popen(['powershell', awsEcrLoginCmd], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
print(stdout.decode(), stderr.decode())
Однако, когда тот же код запускается с того же компьютера с Windows 10 в удаленном сеансе PowerShell, как показано ниже,
$compName = "remoteName"
$cred = Get-Credential -UserName "$env:userdomain\$env:username"
$s1 = New-PSSession -ComputerName $compName -Credential $cred
$s1 | Enter-PSSession
я получаю следующий вывод:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error saving credentials: error storing credentials -
err: exit status 1,
out: `A specified logon session does not exist. It may already have been terminated.`
Как войти в aws ecr с помощью AWS Tools for PowerShell при запуске с удаленного PSSession?