2017-01-16 17 views
8

Ben Salt-Api kullanmak çalışılıyor, bu nedenle aşağıdaki gibi ben /etc/salt/master.d/ bir salt-api.conf yarattı:Yapılandırma Tuz API - Java

external_auth: 
    pam: 
    saltuser: 
     - .* 
     - '@wheel' # to allow access to all wheel modules 
     - '@runner' # to allow access to all runner modules 
     - '@jobs' # to allow access to the jobs runner and/or wheel module 

rest_cherrypy: 
    port: 8000 
    ssl_crt: /etc/pki/tls/certs/localhost.crt 
    ssl_key: /etc/pki/tls/certs/localhost.key 
    disable_ssl: True 
    webhook_disable_auth: True 
    webhook_url: /hook 

/etc/salt/master kullanıcı user: root olarak ayarlanır. Ben pam kullanarak authenticate çalıştığınızda Yani lokal çalışır:

sudo salt -a pam '*' test.ping 
username: saltuser 
password: saltuser 

minion: 
    True 

Ancak curl kullanarak çalıştıklarında başarısız:

curl -i http://localhost:8000/login -H "Accept: application/json" -d username='saltuser' -d password='saltuser' -d eauth='pam' 
HTTP/1.1 401 Unauthorized 
Content-Length: 760 
Access-Control-Expose-Headers: GET, POST 
Vary: Accept-Encoding 
Server: CherryPy/3.5.0 
Allow: GET, HEAD, POST 
Access-Control-Allow-Credentials: true 
Date: Mon, 16 Jan 2017 05:51:48 GMT 
Access-Control-Allow-Origin: * 
Content-Type: text/html;charset=utf-8 
Set-Cookie: session_id=f4c747f23e95ea7742a11a6e6cef146b91a31737; expires=Mon, 16 Jan 2017 15:51:48 GMT; Path=/ 

<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta> 
    <title>401 Unauthorized</title> 
    <style type="text/css"> 
    #powered_by { 
     margin-top: 20px; 
     border-top: 2px solid black; 
     font-style: italic; 
    } 

    #traceback { 
     color: red; 
    } 
    </style> 
</head> 
    <body> 
     <h2>401 Unauthorized</h2> 
     <p>Could not authenticate using provided credentials</p> 
     <pre id="traceback"></pre> 
    <div id="powered_by"> 
     <span> 
     Powered by <a href="http://www.cherrypy.org">CherryPy 3.5.0</a> 
     </span> 
    </div> 
    </body> 
</html> 

Böylece ben Java müşteri ya var edememek değilim veya Python istemcisi bağlandı. Yapılandırmamda ne eksik? salt-master zaten root olarak çalışıyor. Benim Java kodunda Gönderen: Eğer doğrulanmış çünkü

import com.suse.salt.netapi.AuthModule; 
import com.suse.salt.netapi.calls.WheelResult; 
import com.suse.salt.netapi.calls.wheel.Key; 
import com.suse.salt.netapi.client.SaltClient; 
import com.suse.salt.netapi.exception.SaltException; 

import java.net.URI; 
import java.util.Optional; 

/** 
* Example code calling wheel functions. 
*/ 
public class Salt { 

    private static final String SALT_API_URL = " http://localhost:8000"; 
    private static final String USER = "saltuser"; 
    private static final String PASSWORD = "saltuser"; 

    public static void main(String[] args) throws SaltException { 
     // Init the client 
     SaltClient client = new SaltClient(URI.create(SALT_API_URL)); 

     // List accepted and pending minion keys 
     WheelResult<Key.Names> keyResults = Key.listAll().callSync(
       client, USER, PASSWORD, AuthModule.AUTO); 
     Key.Names keys = keyResults.getData().getResult(); 

     System.out.println("\n--> Accepted minion keys:\n"); 
     keys.getMinions().forEach(System.out::println); 
     System.out.println("\n--> Pending minion keys:\n"); 
     keys.getUnacceptedMinions().forEach(System.out::println); 

     // Generate a new key pair and accept the public key 
     WheelResult<Key.Pair> genResults = Key.genAccept("new.minion.id", Optional.empty()) 
       .callSync(client, USER, PASSWORD, AuthModule.AUTO); 
     Key.Pair keyPair = genResults.getData().getResult(); 

     System.out.println("\n--> New key pair:"); 
     System.out.println("\nPUB:\n\n" + keyPair.getPub()); 
     System.out.println("\nPRIV:\n\n" + keyPair.getPriv()); 
    } 
} 

com.suse.salt.netapi.exception.SaltUserUnauthorizedException: Salt user does not have sufficient permissions 
    at com.suse.salt.netapi.client.impl.HttpClientConnection.createSaltException(HttpClientConnection.java:217) 
    at com.suse.salt.netapi.client.impl.HttpClientConnection.executeRequest(HttpClientConnection.java:204) 
    at com.suse.salt.netapi.client.impl.HttpClientConnection.request(HttpClientConnection.java:85) 
    at com.suse.salt.netapi.client.impl.HttpClientConnection.getResult(HttpClientConnection.java:73) 
+1

/var/log/auth.log adresinde herhangi bir girişimi var mı? – kwarunek

cevap

3

Sen 401 Yetkisiz olsun.

bu sayfaya göre salt.netapi.rest_cherrypy önce URL giriş yapıp erişim kodu almak ve sonra bu işleç yoluyla diğer işlevlere erişebilirsiniz.

İhtiyacınız olursa daha fazlasını açıklayacağım.

DÜZENLEME: kıvrılma yoluyla

Örnek isteği: daha açıklamak

curl -si localhost:8000/login \ 
-c ~/cookies.txt \ 
-H "Accept: application/json" \ 
-H "Content-type: application/json" \ 
-d '{ 
    "username": "saltuser", 
    "password": "saltuser", 
    "eauth": "auto" 
}' 

ve bu bukle komutu ile bu isteği göndermek

POST/HTTP/1.1 
Host: localhost:8000 
Content-Length: 42 
Content-Type: application/json 
Accept: application/json 

{"username": "saltuser", "password": "saltuser", "eauth": "auto"} 

ve cevap olarak almak

HTTP/1.1 200 OK 
Content-Type: application/json 
Content-Length: 206 
X-Auth-Token: 6d1b722e 
Set-Cookie: session_id=6d1b722e; expires=Sat, 17 Nov 2012 03:23:52 GMT; Path=/ 

{"return": { 
"token": "6d1b722e", 
"start": 1363805943.776223, 
"expire": 1363849143.776224, 
"user": "saltuser", 
"eauth": "pam", 
"perms": [ 
    "grains.*", 
    "status.*", 
    "sys.*", 
    "test.*" 
] 
}} 

ve belirteç görebilirsiniz o "belirteç": "6d1b722e"

şimdi Eğer isteğinizin belirteç Auth-Token olarak bir yay izah ihtiva gönderebilir.

DÜZENLEME 2:

kafanızda tutun kimlik doğrulaması için Pam kullanmak ve bu size os DÜZENLEME 3'te aynı kullanıcıyı olması anlamına:

değil çalışmak

kullanımı bu asgari con olarak tuz-api conf

external_auth: 
    pam: 
     saltuser: 
     - .* 

    rest_cherrypy: 
    port: 8000 
    disable_ssl: True 
    host: 0.0.0.0 
+0

Lütfen daha fazlasını açıklayın! – cybertextron

+0

@cybertextron daha fazla açıklamayı ekledi – sahama

+0

uzak kullanıcılar için çalışıyor mu? Bunu uzak bir sunucudan yapmayı denediniz mi? – cybertextron

4

Ben sahama en cevapta açıklandığı giriş uç noktasını kullanarak rağmen aynı sorunu yaşamıştır. "eauth": "pam"'u açıkça ayarlayarak çözdüm. İsteğim şu şekilde görünüyor:

curl -si localhost:8000/login \ 
-c ~/cookies.txt \ 
-H "Accept: application/json" \ 
-H "Content-type: application/json" \ 
-d '{ 
    "username": "saltuser", 
    "password": "saltuser", 
    "eauth": "pam" 
}'