curl --request PATCH \
--url https://api.ngrok.com/ssh_user_certificates/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'ngrok-version: <ngrok-version>' \
--data '
{
"id": "<string>",
"description": "<string>",
"metadata": "<string>"
}
'import requests
url = "https://api.ngrok.com/ssh_user_certificates/{id}"
payload = {
"id": "<string>",
"description": "<string>",
"metadata": "<string>"
}
headers = {
"ngrok-version": "<ngrok-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'ngrok-version': '<ngrok-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({id: '<string>', description: '<string>', metadata: '<string>'})
};
fetch('https://api.ngrok.com/ssh_user_certificates/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ngrok.com/ssh_user_certificates/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'description' => '<string>',
'metadata' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"ngrok-version: <ngrok-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ngrok.com/ssh_user_certificates/{id}"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("ngrok-version", "<ngrok-version>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.ngrok.com/ssh_user_certificates/{id}")
.header("ngrok-version", "<ngrok-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngrok.com/ssh_user_certificates/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["ngrok-version"] = '<ngrok-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"uri": "<string>",
"created_at": "<string>",
"description": "<string>",
"metadata": "<string>",
"public_key": "<string>",
"key_type": "<string>",
"ssh_certificate_authority_id": "<string>",
"principals": [
"<string>"
],
"critical_options": {},
"extensions": {},
"valid_after": "<string>",
"valid_until": "<string>",
"certificate": "<string>"
}{
"status_code": 123,
"msg": "<string>",
"error_code": "<string>",
"details": {}
}{
"status_code": 123,
"msg": "<string>",
"error_code": "<string>",
"details": {}
}Update
Update an SSH User Certificate
curl --request PATCH \
--url https://api.ngrok.com/ssh_user_certificates/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'ngrok-version: <ngrok-version>' \
--data '
{
"id": "<string>",
"description": "<string>",
"metadata": "<string>"
}
'import requests
url = "https://api.ngrok.com/ssh_user_certificates/{id}"
payload = {
"id": "<string>",
"description": "<string>",
"metadata": "<string>"
}
headers = {
"ngrok-version": "<ngrok-version>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'ngrok-version': '<ngrok-version>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({id: '<string>', description: '<string>', metadata: '<string>'})
};
fetch('https://api.ngrok.com/ssh_user_certificates/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ngrok.com/ssh_user_certificates/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'description' => '<string>',
'metadata' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"ngrok-version: <ngrok-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ngrok.com/ssh_user_certificates/{id}"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("ngrok-version", "<ngrok-version>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.ngrok.com/ssh_user_certificates/{id}")
.header("ngrok-version", "<ngrok-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngrok.com/ssh_user_certificates/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["ngrok-version"] = '<ngrok-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"uri": "<string>",
"created_at": "<string>",
"description": "<string>",
"metadata": "<string>",
"public_key": "<string>",
"key_type": "<string>",
"ssh_certificate_authority_id": "<string>",
"principals": [
"<string>"
],
"critical_options": {},
"extensions": {},
"valid_after": "<string>",
"valid_until": "<string>",
"certificate": "<string>"
}{
"status_code": 123,
"msg": "<string>",
"error_code": "<string>",
"details": {}
}{
"status_code": 123,
"msg": "<string>",
"error_code": "<string>",
"details": {}
}Authorizations
Body
Response
Update an SSH User Certificate
the list of principals included in the ssh user certificate. This is the list of usernames that the certificate holder may sign in as on a machine authorizing the signing certificate authority. Dangerously, if no principals are specified, this certificate may be used to log in as any user.
A map of critical options included in the certificate. Only two critical options are currently defined by OpenSSH: force-command and source-address. See the OpenSSH certificate protocol spec for additional details.
A map of extensions included in the certificate. Extensions are additional metadata that can be interpreted by the SSH server for any purpose. These can be used to permit or deny the ability to open a terminal, do port forwarding, x11 forwarding, and more. If unspecified, the certificate will include limited permissions with the following extension map: {"permit-pty": "", "permit-user-rc": ""} OpenSSH understands a number of predefined extensions. See the OpenSSH certificate protocol spec for additional details.
Was this page helpful?