如何在命令提示符下使用aws-adfs时指定用户名/密码



在Linux中,以下命令可以很好地工作,其中我们为envrioment变量指定用户名和密码,并在aws-adfs中使用'-env"切换

Linux .sh
export username=<my_username>
export password=<my_pass>
aws-adfs login --region <region> --adfs-host <adfs-host> --role-arn <Role> --env --no-sspi --profile <local-profile-name>

在使用cmd的Windows上,我无法获得&quot--env";工作。无论我在这里尝试了什么,它都将始终使用我的AD登录用户,而不是我想要使用的第二个帐户的用户/密码。

Windows:
(aws-adfs) C:>set username="my_username"
(aws-adfs) C:>set password="my_password"
aws-adfs login --region <region> --adfs-host <adfs-host> --role-arn <Role> --env --profile <local-profile-name>

Powershell:
$env:username = 'my_username'
$env:password = 'my_password'
dir env:
aws-adfs login --region <region> --adfs-host <adfs-host> --role-arn <Role> --env --profile <local-profile-name>

有人知道在使用aws-adfs时如何在cmd中实现以下操作之一吗?

--env                           Read username, password from environment
variables (username and password).
--stdin                         Read username, password from standard input
separated by a newline.
--authfile TEXT                 Read username, password from a local file
(optional)

更新:

根据下面的注释,在批处理文件中设置用户名和密码的值是有效的。

set "username=my_username"
set "password=my_password"

然而,我们似乎有一个aws-adfs的错误,在windows上,您还需要使用用户名的完整电子邮件地址,但在Linux中,只有用户名才能使用

在Windows上预定义了环境变量USERNAME,所有字母都在大写,其中包含用户帐户的名称,有关Windows上预定义环境变量的更多信息,请参阅维基百科章节"Windows环境变量"。

2.0.1版本的aws-adfs在Windows上不要求用小写字母定义环境变量username。环境变量名称在Linux上区分大小写,在Linux中可以定义环境变量USERNAME,此外还可以定义环境参数username

可以在Windows命令提示符窗口中使用:

set "username="
set "username=my_username@mail.com"
set "password="
set "password=my_password"

删除了第一个不区分大小写的环境变量USERNAME,然后定义了环境变量username,所有字母都小写,字符串位于等号和末尾的双引号之间。对现有环境变量的重新定义不会更改变量名称中字母的大小写。用户名通常是一个电子邮件地址,应该完全定义。

然后删除不区分大小写的环境变量password,可能是偶然定义的,并用名称password重新定义,所有字母都小写,字符串值在命令行末尾的="之间。

请阅读我关于在命令行上使用"set var=text"后为什么没有"echo%var%"的字符串输出的答案?第一个"上的Windows命令集位于变量名后面的命令set的参数字符串的开头,或者位于等号后面的字符串值的开头,这会产生很大的不同。set username="my_username"将带有双引号和错误输入的尾随空格的字符串"my_username"分配给环境变量username在这个用例中肯定不好。带有"的用户名字符串肯定不起作用。

但在Windows命令提示符窗口中也可以只使用:

set "username=my_username@mail.com"
set "password=my_password"

环境变量CCD_ 16的字符串值在这种情况下用字符串CCD_。虽然在命令提示符窗口中完全用小写写下变量名称,但变量名称不会更改。

PowerShell控制台窗口中,应使用执行相同操作

$Env:username = ''
$Env:username = 'my_username@mail.com'
$Env:password = ''
$Env:password = 'my_password'

或者只使用:

$Env:username = 'my_username@mail.com'
$Env:password = 'my_password'

请参阅有关环境变量-PowerShell的Microsoft文档。

对环境变量列表所做的修改与在Windows命令提示符窗口中使用命令SET所做的相同。

Windows批处理文件中,最好在单独的本地执行环境中定义两个环境变量,如下所示:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "username=my_username@mail.com"
set "password=my_password"
aws-adfs login --region "region" --adfs-host "adfs-host" --role-arn "Role" --env --profile "local-profile-name"
endlocal

命令SETLOCAL创建一个新的环境变量列表,作为当前环境变量列表的副本。在这个新列表中,环境变量USERNAME和(如果存在(password被更新或创建为具有正确字符串值的新的。然后使用这两个环境变量来执行CCD_ 20。最后,命令ENDLOCAL将丢弃刚刚使用的带有变量USERNAMEpassword的环境变量列表,并使用Windows shell为当前帐户默认定义的字符串值恢复带有变量USERNAME的先前环境变量列表。

有关SETLOCALENDLOCAL令的详细信息,请阅读此答案。

相关内容

  • 没有找到相关文章

最新更新