使用curl

时间:2018-06-12 14:56:16

标签: azure azure-cli kudu azure-cloud-shell

尝试从curl访问Azure App日志流,如Azure Kudu网页所示。我在Windows 10命令提示符下。这是我正在尝试的示例命令行:

curl -u myUserName https://myApp.scm.azurewebsites.net/api/logstream
Enter host password for user 'myUserName':<password typed here>
  • myApp:是我的Azure App服务的名称。

  • myUserName

    • 我尝试使用从Web部署配置文件中获取的凭据,这是Visual Studio发布配置文件使用的凭据。也就是说,当用户看起来像$myApp并且密码是一个60字符长的字符串。
    • 我还尝试从Azure门户创建用户级部署凭据&gt; MyApp&gt;部署凭据,它要求部署/ FTP用户名和密码

在这两种情况下,curl都会显示网页标题的内容 401 - 未经授权:由于凭据无效而拒绝访问。。我还尝试在双引号内包装用户名,以及用反斜杠(\)转义美元符号($)。没有运气。

我必须做一些非常愚蠢的事情。我已经浏览了几个文档和帖子,例如official Kudu docsmsdnhere on SO,我想我正在按照说明操作。其他来源:MSDN againold seirer post

修改

建议之后,我尝试使用用户级部署凭据访问https://myApp.scm.azurewebsites.net/basicauth,并使用VS Web部署凭据(转义和未转义):没有运气。我还再次保存了用户级密码,以防万一我之前犯了错误。

然后我从curl切换到Insomnia客户端。

当我点击basicauth时,无论是用户级部署凭据还是Web部署凭据,都会正确显示实际的Kudu页面。
当我使用两个凭据点击api/logstream时,似乎请求永远不会返回,我猜这是由于日志输出的连续流量。

因此,与Insomnia客户端相比,似乎从命令行开始使用curl会发生一些有趣的事情。我正在使用的卷曲版本:

  

卷曲7.55.1(Windows)libcurl / 7.55.1 WinSSL
  发布日期:[未发布]
  协议:dict文件ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
  功能:AsynchDNS IPv6大文件SSPI Kerberos SPNEGO NTLM SSL

再次回到curl:

当我删除-u选项(以及密码提示)并手动添加由Insomnia生成的基本身份验证标头时,一切都很好。
当我使用-u选项传递myUserName:myPassword时,一切都很好。因此,在其提示符下键入密码的方式确实如此。

编辑#2

再次,在@David Ebbo建议之后,详细的curl输出显示计算出的Base-64令牌似乎是错误的。

  • 工作时间为44个字符,以单个=结尾。
  • 卷曲-v输出中显示的那个是20个字符长,以双=结尾。
  • 他们两人共享相同的17个字符。

根据this,这可能是因为跟踪换行被视为密码的一部分。但无论如何,不​​知道如何继续前进。在这一点上,只需了解正在发生的事情,已经有了解决方法。为了完整起见,这是(编辑的)详细日志:

*   Trying xxx.xx.xx.xxx...
* TCP_NODELAY set
* Connected to myApp.scm.azurewebsites.net (xxx.xx.xx.xxx) port 443 (#0)
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 1/3)
* schannel: disabled server certificate revocation checks
* schannel: verifyhost setting prevents Schannel from comparing the supplied target name with the subject names in server certificates.
* schannel: sending initial handshake data: sending 186 bytes...
* schannel: sent initial handshake data: sent 186 bytes
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: encrypted data got 2904
* schannel: encrypted data buffer: offset 2904 length 4096
* schannel: received incomplete message, need more data
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: encrypted data got 818
* schannel: encrypted data buffer: offset 3722 length 4096
* schannel: sending next handshake data: sending 126 bytes...
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 2/3)
* schannel: encrypted data got 51
* schannel: encrypted data buffer: offset 51 length 4096
* schannel: SSL/TLS handshake complete
* schannel: SSL/TLS connection with myApp.scm.azurewebsites.net port 443 (step 3/3)
* schannel: stored credential handle in session cache
* Server auth using Basic with user 'myUserName'
> GET /api/logstream HTTP/1.1
> Host: myApp.scm.azurewebsites.net
> Authorization: Basic {{CALCULATED TOKEN}}
> User-Agent: curl/7.55.1
> Accept: */*
>
* schannel: client wants to read 102400 bytes
* schannel: encdata_buffer resized 103424
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: encrypted data got 1501
* schannel: encrypted data buffer: offset 1501 length 103424
* schannel: decrypted data length: 1472
* schannel: decrypted data added: 1472
* schannel: decrypted data cached: offset 1472 length 102400
* schannel: encrypted data buffer: offset 0 length 103424
* schannel: decrypted data buffer: offset 1472 length 102400
* schannel: schannel_recv cleanup
* schannel: decrypted data returned 1472
* schannel: decrypted data buffer: offset 0 length 102400
< HTTP/1.1 401 Unauthorized                  
< Content-Type: text/html                    
< Server: Microsoft-IIS/10.0                 
* Authentication problem. Ignoring this.     
< WWW-Authenticate: Basic realm="site"       
< Date: Wed, 13 Jun 2018 21:23:59 GMT        
< Content-Length: 1293                       
<
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
{{... CONTINUES}}

2 个答案:

答案 0 :(得分:3)

要从其他答案中继续学习。

使用

curl -u 'myUserName:password' https://myApp.scm.azurewebsites.net/api/logstream

其中用户名和密码是发布用户名和密码。这些可以在您的Azure门户的“ Azure功能”概述菜单项中找到。单击Get publish profile以获取XML文件。在XML中寻找Web Deploy发布配置文件元素。此元素包含userNameuserPWD属性,它们是您的发布用户名和密码。

您的用户名很可能以$开头。如果您使用bash或其中一个shell,则必须在curl -u参数中使用单引号。使用双引号将导致参数替换。

enter image description here

答案 1 :(得分:2)

尝试:

curl -u 'myUserName:password' https://myApp.scm.azurewebsites.net/api/logstream