(CentOS 7)
当我尝试像这样的curl命令时curl -u elastic -X GET 'http://localhost:9200/*' | more
,我发现仅输入一个字母后,该命令就会执行,就像我按下了回车键一样,并且无法进行身份验证。
这是正常的吗?
我可以重定向到一个文件,或者只是向上滚动,甚至可以使用 wget (还没有尝试过),或者甚至将我的密码放入命令中,但我想知道这里发生了什么。
答案1
问题是curl
和more
都同时从同一个 TTY 读取数据。此外,他们可能都在更改 TTY 设置;curl
因为您输入的密码不应显示在屏幕上。因为more
它需要基于字符的输入,而不是默认的基于行的输入。
为了防止这种情况发生,我认为您只需要延迟启动more
命令,直到curl
命令开始生成输出。我不知道有什么标准命令可以做到这一点,但可以用两行 Python 代码来完成。
#!/usr/bin/python
import select
select.select([0], [], [])
使用上面的 Python 脚本,您可以尝试原始命令的以下变体:
curl -u elastic -X GET 'http://localhost:9200/*' | ( ./wait.py ; more )
答案2
每
# curl --help | grep -- ' -u'
-u, --user USER[:PASSWORD] Server user and password
#
尝试:
curl --silent --user elastic:changeme --request GET localhost:9200/*?pretty | more
还有另一个解决方案:
# pass=changeme
# curl -I -u alexus:$pass https://X.X.X
HTTP/1.1 200 OK
Server: nginx/1.13.5
Date: Wed, 27 Sep 2017 17:27:19 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 2350
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: max-age=31536000
Last-Modified: Sun, 13 Aug 2017 18:21:51 GMT
Strict-Transport-Security: max-age=15768000
#
还可以存储经过文件内的变量(不要忘记chmod 700
该文件)并用于source
在运行之前读取变量curl
。
瞧!