aspera-cli 4.8.0 → 4.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +445 -160
- data/docs/test_env.conf +1 -5
- data/examples/dascli +1 -4
- data/examples/{transfer.rb → node.rb} +17 -46
- data/examples/server.rb +93 -0
- data/lib/aspera/aoc.rb +4 -2
- data/lib/aspera/ats_api.rb +3 -1
- data/lib/aspera/cli/extended_value.rb +1 -0
- data/lib/aspera/cli/formater.rb +3 -1
- data/lib/aspera/cli/info.rb +1 -1
- data/lib/aspera/cli/main.rb +14 -11
- data/lib/aspera/cli/manager.rb +4 -4
- data/lib/aspera/cli/plugin.rb +50 -9
- data/lib/aspera/cli/plugins/aoc.rb +88 -52
- data/lib/aspera/cli/plugins/config.rb +5 -0
- data/lib/aspera/cli/plugins/faspex.rb +5 -4
- data/lib/aspera/cli/plugins/node.rb +3 -2
- data/lib/aspera/cli/plugins/server.rb +7 -108
- data/lib/aspera/cli/plugins/shares.rb +21 -1
- data/lib/aspera/cli/transfer_agent.rb +21 -14
- data/lib/aspera/cli/version.rb +1 -1
- data/lib/aspera/environment.rb +15 -2
- data/lib/aspera/fasp/agent_base.rb +9 -7
- data/lib/aspera/fasp/installation.rb +15 -19
- data/lib/aspera/fasp/parameters.rb +38 -30
- data/lib/aspera/fasp/parameters.yaml +69 -17
- data/lib/aspera/hash_ext.rb +14 -2
- data/lib/aspera/id_generator.rb +12 -10
- data/lib/aspera/keychain/encrypted_hash.rb +3 -3
- data/lib/aspera/log.rb +1 -1
- data/lib/aspera/nagios.rb +26 -19
- data/lib/aspera/oauth.rb +4 -4
- data/lib/aspera/open_application.rb +21 -19
- data/lib/aspera/persistency_folder.rb +3 -0
- data/lib/aspera/preview/image_error.png +0 -0
- data/lib/aspera/preview/video_error.png +0 -0
- data/lib/aspera/proxy_auto_config.rb +6 -4
- data/lib/aspera/rest_error_analyzer.rb +15 -13
- data/lib/aspera/rest_errors_aspera.rb +42 -40
- data/lib/aspera/secret_hider.rb +11 -5
- data/lib/aspera/ssh.rb +1 -0
- data/lib/aspera/uri_reader.rb +15 -13
- data.tar.gz.sig +0 -0
- metadata +4 -3
- metadata.gz.sig +0 -0
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[comment1]: # (Do not edit this README.md, edit docs/README.erb.md, for details, read docs/README.md)
|
4
4
|
|
5
|
-
Version : 4.
|
5
|
+
Version : 4.9.0
|
6
6
|
|
7
7
|
Laurent/2016-2022
|
8
8
|
|
@@ -58,33 +58,12 @@ Using APIs (application REST API and transfer SDK) will prove to be easier to de
|
|
58
58
|
|
59
59
|
For scripting and ad'hoc command line operations, `ascli` is perfect.
|
60
60
|
|
61
|
-
##
|
61
|
+
## Notations, Shell, Examples
|
62
62
|
|
63
63
|
In examples, command line operations are shown using a shell such: `bash` or `zsh`.
|
64
64
|
|
65
65
|
Command line parameters in examples beginning with `my_`, like `my_param_value` are user-provided value and not fixed value commands.
|
66
66
|
|
67
|
-
`ascli` is typically executed in a shell, either interactively or in a script. `ascli` receives its arguments from this shell.
|
68
|
-
|
69
|
-
On Linux and Unix environments, this is typically a POSIX shell (bash, zsh, ksh, sh). In this environment shell command line parsing applies before `ascli` (Ruby) is executed, e.g. [bash shell operation](https://www.gnu.org/software/bash/manual/bash.html#Shell-Operation). Ruby receives a list parameters and gives it to `ascli`. So special character handling (quotes, spaces, env vars, ...) is done in the shell.
|
70
|
-
|
71
|
-
On Windows, `cmd.exe` is typically used. Windows process creation does not receive the list of arguments but just the whole line. It's up to the program to parse arguments. Ruby follows the Microsoft C/C++ parameter parsing rules.
|
72
|
-
|
73
|
-
* [Windows: How Command Line Parameters Are Parsed](https://daviddeley.com/autohotkey/parameters/parameters.htm#RUBY)
|
74
|
-
* [Understand Quoting and Escaping of Windows Command Line Arguments](http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/)
|
75
|
-
|
76
|
-
In case of doubt of argument values after parsing test like this:
|
77
|
-
|
78
|
-
```bash
|
79
|
-
ascli conf echo "Hello World" arg2 3
|
80
|
-
```
|
81
|
-
|
82
|
-
```bash
|
83
|
-
"Hello World"
|
84
|
-
ERROR: Argument: unprocessed values: ["arg2", "3"]
|
85
|
-
```
|
86
|
-
|
87
|
-
`echo` displays the value of the first argument using ruby syntax (strings get double quotes) after command line parsing (shell) and extended value parsing (`ascli`), next command line arguments are shown in the error message.
|
88
67
|
|
89
68
|
## Quick Start
|
90
69
|
|
@@ -99,7 +78,7 @@ ascli --version
|
|
99
78
|
```
|
100
79
|
|
101
80
|
```bash
|
102
|
-
4.
|
81
|
+
4.9.0
|
103
82
|
```
|
104
83
|
|
105
84
|
### First use
|
@@ -574,6 +553,191 @@ Using `ascli` with plugin `server` for command line gives advantages over ascp:
|
|
574
553
|
|
575
554
|
Moreover all `ascp` options are supported either through transfer spec parameters and with the possibility to provide `ascp` arguments directly when the `direct` agent is used (`EX_ascp_args`).
|
576
555
|
|
556
|
+
### <a id="parsing"></a>Command line parsing, Special Characters
|
557
|
+
|
558
|
+
`ascli` is typically executed in a shell, either interactively or in a script.
|
559
|
+
`ascli` receives its arguments from this shell (through Operating System).
|
560
|
+
|
561
|
+
#### Shell parsing for Linux, Unix, Macos
|
562
|
+
|
563
|
+
On Linux and Unix environments, this is typically a POSIX shell (bash, zsh, ksh, sh).
|
564
|
+
In this environment the shell parses the command line, possibly replacing variables, etc...
|
565
|
+
see [bash shell operation](https://www.gnu.org/software/bash/manual/bash.html#Shell-Operation).
|
566
|
+
Then it builds a list of arguments and then `ascli` (Ruby) is executed.
|
567
|
+
Ruby receives a list parameters from shell and gives it to `ascli`.
|
568
|
+
So special character handling (quotes, spaces, env vars, ...) is first done in the shell.
|
569
|
+
|
570
|
+
#### Shell parsing for Windows
|
571
|
+
|
572
|
+
On Windows, `cmd.exe` is typically used.
|
573
|
+
Windows process creation does not receive the list of arguments but just the whole line.
|
574
|
+
It's up to the program to parse arguments. Ruby follows the Microsoft C/C++ parameter parsing rules.
|
575
|
+
|
576
|
+
* [Windows: How Command Line Parameters Are Parsed](https://daviddeley.com/autohotkey/parameters/parameters.htm#RUBY)
|
577
|
+
* [Understand Quoting and Escaping of Windows Command Line Arguments](http://www.windowsinspired.com/understanding-the-command-line-string-and-arguments-received-by-a-windows-program/)
|
578
|
+
|
579
|
+
#### Extended Values (JSON, Ruby, ...)
|
580
|
+
|
581
|
+
Some of the CLI parameters are expected to be [Extended Values](#extended), i.e. not a simple strings, but a complex structure (Hash, Array).
|
582
|
+
Typically, the `@json:` modifier is used, it expects a JSON string. JSON itself has some special syntax: for example `"` is used to denote strings.
|
583
|
+
|
584
|
+
#### Testing Extended Values
|
585
|
+
|
586
|
+
In case of doubt of argument values after parsing, one can test using command `config echo`. `config echo` takes exactly **one** argument which can use the [Extended Value](#extended) syntax. Unprocessed command line arguments are shown in the error message.
|
587
|
+
|
588
|
+
Example: The shell parses three arguments (as strings: `1`, `2` and `3`), so the additional two arguments are not processed by the `echo` command.
|
589
|
+
|
590
|
+
```bash
|
591
|
+
ascli conf echo 1 2 3
|
592
|
+
```
|
593
|
+
|
594
|
+
```bash
|
595
|
+
"1"
|
596
|
+
ERROR: Argument: unprocessed values: ["2", "3"]
|
597
|
+
```
|
598
|
+
|
599
|
+
`config echo` displays the value of the first argument using Ruby syntax: it surrounds a string with `"` and add `\` before special characters.
|
600
|
+
Note that it gets its value after shell command line parsing and `ascli` extended value parsing.
|
601
|
+
|
602
|
+
In the following examples (using a POSIX shell, such as `bash`), several sample commands are provided when equivalent.
|
603
|
+
For all example, most of special character handling is not specific to `ascli`: It depoends on the underlying syntax: shell , JSON, etc...
|
604
|
+
Depending on the case, a different `format` is used to display the actual value.
|
605
|
+
|
606
|
+
For example, in the simple string `Hello World`, the space character is special for the shell, so it must be escaped so that a single value is represented.
|
607
|
+
|
608
|
+
Double quotes are processed by the shell to create a single string argument.
|
609
|
+
For POSIX shells, single quotes can also be used in this case, or protext the special character ` ` (space) with a backslash.
|
610
|
+
|
611
|
+
```bash
|
612
|
+
ascli conf echo "Hello World" --format=text
|
613
|
+
ascli conf echo 'Hello World' --format=text
|
614
|
+
ascli conf echo Hello\ World --format=text
|
615
|
+
```
|
616
|
+
|
617
|
+
```output
|
618
|
+
Hello World
|
619
|
+
```
|
620
|
+
|
621
|
+
#### Using a shell variable, parsed by shell, in an extended value
|
622
|
+
|
623
|
+
To be evaluated by shell, the shell variable must not be in single quotes.
|
624
|
+
Note we use a simple variable here: the variable is not necessarily an environment variable.
|
625
|
+
Even if the variable contains spaces it makes only one argument to `ascli` because word parsing is made before variable expansion by shell.
|
626
|
+
|
627
|
+
```bash
|
628
|
+
MYVAR="Hello World"
|
629
|
+
ascli conf echo @json:'{"title":"'$MYVAR'"}' --format=json
|
630
|
+
ascli conf echo @json:{\"title\":\"$MYVAR\"} --format=json
|
631
|
+
```
|
632
|
+
|
633
|
+
```json
|
634
|
+
{"title":"Hello World"}
|
635
|
+
```
|
636
|
+
|
637
|
+
#### Double quote in strings in command line
|
638
|
+
|
639
|
+
Double quote is a shell special character.
|
640
|
+
Like any shell special character, it can be protected either by preceding with a backslash or by enclosing in a single quote.
|
641
|
+
|
642
|
+
```bash
|
643
|
+
ascli conf echo \"
|
644
|
+
ascli conf echo '"'
|
645
|
+
```
|
646
|
+
|
647
|
+
```output
|
648
|
+
"
|
649
|
+
```
|
650
|
+
|
651
|
+
Double quote in JSON is a little tricky because `"` is special both for the shell and JSON. Both shell and JSON syntax allow to protect `"`, but only the shell allows protection using single quote.
|
652
|
+
|
653
|
+
```bash
|
654
|
+
ascli conf echo @json:'"\""' --format=text
|
655
|
+
ascli conf echo @json:\"\\\"\" --format=text
|
656
|
+
ascli conf echo @ruby:\'\"\' --format=text
|
657
|
+
```
|
658
|
+
|
659
|
+
```output
|
660
|
+
"
|
661
|
+
```
|
662
|
+
|
663
|
+
Here a single quote or a backslash protects the double quote to avoid shell processing, and then an additional `\` is added to protect the `"` for JSON. But as `\` is also shell special, then it is protected by another `\`.
|
664
|
+
|
665
|
+
#### Shell and JSON or Ruby special characters in extended value
|
666
|
+
|
667
|
+
Construction of values with special characters is done like this:
|
668
|
+
|
669
|
+
* First select a syntax to represent the extended value, e.g. JSON or Ruby
|
670
|
+
|
671
|
+
* Write the expression using this syntax, for example, using JSON:
|
672
|
+
|
673
|
+
```json
|
674
|
+
{"title":"Test \" ' & \\"}
|
675
|
+
```
|
676
|
+
|
677
|
+
or using Ruby:
|
678
|
+
|
679
|
+
```ruby
|
680
|
+
{"title"=>"Test \" ' & \\"}
|
681
|
+
{'title'=>%q{Test " ' & \\}}
|
682
|
+
```
|
683
|
+
|
684
|
+
Both `"` and `\` are special characters for JSON and Ruby and can be protected with `\` (unless Ruby's extended single quote notation `%q` is used).
|
685
|
+
|
686
|
+
* Then, since the value will be evaluated by shell, any shell special characters must be protected, either using preceding `\` for each character to protect, or by enclosing in single quote:
|
687
|
+
|
688
|
+
```bash
|
689
|
+
ascli conf echo @json:{\"title\":\"Test\ \\\"\ \'\ \&\ \\\\\"} --format=json
|
690
|
+
ascli conf echo @json:'{"title":"Test \" '\'' & \\"}' --format=json
|
691
|
+
ascli conf echo @ruby:"{'title'=>%q{Test \" ' & \\\\}}" --format=json
|
692
|
+
```
|
693
|
+
|
694
|
+
```json
|
695
|
+
{"title":"Test \" ' & \\"}
|
696
|
+
```
|
697
|
+
|
698
|
+
#### Reading special characters interractively
|
699
|
+
|
700
|
+
If `ascli` is used interractively (a user typing on terminal), it is easy to require the user to type values:
|
701
|
+
|
702
|
+
```bash
|
703
|
+
ascli conf echo @ruby:"{'title'=>gets.chomp}" --format=json
|
704
|
+
```
|
705
|
+
|
706
|
+
`gets` is Ruby's method of terminal input (terminated by `\n`), and `chomp` removes the trailing `\n`.
|
707
|
+
|
708
|
+
#### Extended value using special characters read from environmental variables or files
|
709
|
+
|
710
|
+
Using a text editor or shell: create a file `title.txt` (and env var) that contains exactly the text required: `Test " ' & \` :
|
711
|
+
|
712
|
+
```bash
|
713
|
+
export MYTITLE='Test " '\'' & \'
|
714
|
+
echo -n $MYTITLE > title.txt
|
715
|
+
```
|
716
|
+
|
717
|
+
Using those values will not require any escaping of characters since values do not go through shell or JSON parsing.
|
718
|
+
|
719
|
+
If the value is to be assigned directly to an option of ascli, then you can directly use the content of the file or env var using the `@file:` or `@env:` readers:
|
720
|
+
|
721
|
+
```bash
|
722
|
+
ascli conf echo @file:title.txt --format=text
|
723
|
+
ascli conf echo @env:MYTITLE --format=text
|
724
|
+
```
|
725
|
+
|
726
|
+
```output
|
727
|
+
Test " ' & \
|
728
|
+
```
|
729
|
+
|
730
|
+
If the value to be used is in a more complex structure, then the `@ruby:` modifier can be used: it allows any ruby code in expression, including reading from file or env var. In those cases, there is no character to protect because values are not parsed by the shell, or JSON or even Ruby.
|
731
|
+
|
732
|
+
```bash
|
733
|
+
ascli conf echo @ruby:"{'title'=>File.read('title.txt')}" --format=json
|
734
|
+
ascli conf echo @ruby:"{'title'=>ENV['MYTITLE']}" --format=json
|
735
|
+
```
|
736
|
+
|
737
|
+
```json
|
738
|
+
{"title":"Test \" ' & \\"}
|
739
|
+
```
|
740
|
+
|
577
741
|
### Arguments : Commands and options
|
578
742
|
|
579
743
|
Arguments are the units of command line, as parsed by the shell, typically separated by spaces (and called "argv").
|
@@ -677,6 +841,7 @@ If transposition of single object is not desired, use option: `transpose_single`
|
|
677
841
|
|
678
842
|
The style of output can be set using the `format` parameter, supporting:
|
679
843
|
|
844
|
+
* `text` : Value as String
|
680
845
|
* `table` : Text table
|
681
846
|
* `ruby` : Ruby code
|
682
847
|
* `json` : JSON code
|
@@ -1692,6 +1857,28 @@ For example the option `--ts=@json:'{"EX_ascp_args":["-DDL-"]}'` will activate d
|
|
1692
1857
|
This is useful if the transfer fails.
|
1693
1858
|
To store ascp logs in file `aspera-scp-transfer.log` in a folder, use `--ts=@json:'{"EX_ascp_args":["-L","/path/to/folder"]}'`.
|
1694
1859
|
|
1860
|
+
> Implementation note: when transfer agent [`direct`](#agt_direct) is used, the list of files to transfer is provided to `ascp` using either `--file-list` or `--file-pair-list` and a file list (or pair) file generated in a temporary folder. (unless `--file-list` or `--file-pair-list` is provided in option `ts` in `EX_ascp_args`).
|
1861
|
+
|
1862
|
+
In addition to standard methods described in section [File List](#file_list), it is possible to specify the list of file using those additional methods:
|
1863
|
+
|
1864
|
+
* Using the pseudo [*transfer-spec*](#transferspec) parameter `EX_file_list`
|
1865
|
+
|
1866
|
+
```javascript
|
1867
|
+
--sources=@ts --ts=@json:'{"EX_file_list":"filelist.txt"}'
|
1868
|
+
```
|
1869
|
+
|
1870
|
+
* Using the pseudo [*transfer-spec*](#transferspec) parameter `EX_ascp_args`
|
1871
|
+
|
1872
|
+
```javascript
|
1873
|
+
--sources=@ts --ts=@json:'{"EX_ascp_args":["--file-list","myfilelist"]}'
|
1874
|
+
```
|
1875
|
+
|
1876
|
+
> File lists is shown here, there are also similar options for file pair lists.
|
1877
|
+
|
1878
|
+
> Those 2 additional methods avoid the creation of a copy of the file list: if the standard options `--sources=@lines:@file:... --src-type=...` are used, then the file is list read and parsed, and a new file list is created in a temporary folder.
|
1879
|
+
|
1880
|
+
> Those methods have limitations: they apply **only** to the [`direct`](#agt_direct) transfer agent (i.e. local `ascp`) and not for Aspera on Cloud.
|
1881
|
+
|
1695
1882
|
#### <a id="agt_connect"></a>IBM Aspera Connect Client GUI
|
1696
1883
|
|
1697
1884
|
By specifying option: `--transfer=connect`, `ascli` will start transfers using the locally installed Aspera Connect Client. There are no option for `transfer_info`.
|
@@ -1702,6 +1889,7 @@ By specifying option: `--transfer=node`, the CLI will start transfers in an Aspe
|
|
1702
1889
|
Transfer Server using the Node API, either on a local or remote node.
|
1703
1890
|
Parameters provided in option `transfer_info` are:
|
1704
1891
|
|
1892
|
+
<table>
|
1705
1893
|
<tr><th>Name</th><th>Type</th><th>Description</th></tr>
|
1706
1894
|
<tr><td>url</td><td>string</td><td>URL of the node API</br>Mandatory</td></tr>
|
1707
1895
|
<tr><td>username</td><td>string</td><td>node api user or access key</br>Mandatory</td></tr>
|
@@ -1802,7 +1990,7 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
|
|
1802
1990
|
|
1803
1991
|
<table><tr><th>Field</th><th>Type</th><th>D</th><th>N</th><th>C</th><th>Description</th></tr>
|
1804
1992
|
<tr><td>EX_ascp_args</td><td>array</td><td>Y</td><td> </td><td> </td><td>Add native command line arguments to ascp</td></tr>
|
1805
|
-
<tr><td>EX_at_rest_password</td><td>string</td><td>Y</td><td> </td><td> </td><td>
|
1993
|
+
<tr><td>EX_at_rest_password</td><td>string</td><td>Y</td><td> </td><td> </td><td>DEPRECATED: Prefer to use standard parameter: content_protection_password<br/>(env:ASPERA_SCP_FILEPASS)</td></tr>
|
1806
1994
|
<tr><td>EX_file_list</td><td>string</td><td>Y</td><td> </td><td> </td><td>source file list</td></tr>
|
1807
1995
|
<tr><td>EX_file_pair_list</td><td>string</td><td>Y</td><td> </td><td> </td><td>source file pair list</td></tr>
|
1808
1996
|
<tr><td>EX_http_proxy_url</td><td>string</td><td>Y</td><td> </td><td> </td><td>Specify the proxy server address used by HTTP Fallback<br/>(-x)</td></tr>
|
@@ -1810,7 +1998,7 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
|
|
1810
1998
|
<tr><td>EX_license_text</td><td>string</td><td>Y</td><td> </td><td> </td><td>License file text override.<br/>By default ascp looks for license file near executable.<br/>(env:ASPERA_SCP_LICENSE)</td></tr>
|
1811
1999
|
<tr><td>EX_no_read</td><td>bool</td><td>Y</td><td> </td><td> </td><td>no read source<br/>(--no-read)</td></tr>
|
1812
2000
|
<tr><td>EX_no_write</td><td>bool</td><td>Y</td><td> </td><td> </td><td>no write on destination<br/>(--no-write)</td></tr>
|
1813
|
-
<tr><td>EX_proxy_password</td><td>string</td><td>Y</td><td> </td><td> </td><td>Password used for Aspera proxy server authentication.<br/>
|
2001
|
+
<tr><td>EX_proxy_password</td><td>string</td><td>Y</td><td> </td><td> </td><td>Password used for Aspera proxy server authentication.<br/>May be overridden by password in URL EX_fasp_proxy_url.<br/>(env:ASPERA_PROXY_PASS)</td></tr>
|
1814
2002
|
<tr><td>EX_ssh_key_paths</td><td>array</td><td>Y</td><td> </td><td> </td><td>Use public key authentication for SSH and specify the private key file paths<br/>(-i)</td></tr>
|
1815
2003
|
<tr><td>apply_local_docroot</td><td>bool</td><td>Y</td><td> </td><td> </td><td>(--apply-local-docroot)</td></tr>
|
1816
2004
|
<tr><td>authentication</td><td>string</td><td> </td><td> </td><td>Y</td><td>value=token for SSH bypass keys, else password asked if not provided.</td></tr>
|
@@ -1820,7 +2008,7 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
|
|
1820
2008
|
<tr><td>content_protection_password</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies CSEAR password. (content protection)<br/>(env:ASPERA_SCP_FILEPASS)</td></tr>
|
1821
2009
|
<tr><td>cookie</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Metadata for transfer specified by application<br/>(env:ASPERA_SCP_COOKIE)</td></tr>
|
1822
2010
|
<tr><td>create_dir</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies whether to create new directories.<br/>(-d)</td></tr>
|
1823
|
-
<tr><td>delete_before_transfer</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Before transfer, delete files that exist at the destination but not at the source
|
2011
|
+
<tr><td>delete_before_transfer</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Before transfer, delete files that exist at the destination but not at the source.<br/>The source and destination arguments must be directories that have matching names.<br/>Objects on the destination that have the same name but different type or size as objects<br/>on the source are not deleted.<br/>(--delete-before-transfer)</td></tr>
|
1824
2012
|
<tr><td>delete_source</td><td>bool</td><td>Y</td><td>Y</td><td> </td><td>Remove SRC files after transfer success<br/>(--remove-after-transfer)</td></tr>
|
1825
2013
|
<tr><td>destination_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Destination root directory.</td></tr>
|
1826
2014
|
<tr><td>dgram_size</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>UDP datagram size in bytes<br/>(-Z)</td></tr>
|
@@ -1839,10 +2027,11 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
|
|
1839
2027
|
<tr><td>lock_target_rate_kbps</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td> </td></tr>
|
1840
2028
|
<tr><td>min_rate_cap_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td> </td></tr>
|
1841
2029
|
<tr><td>min_rate_kbps</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Set the minimum transfer rate in kilobits per second.<br/>(-m)</td></tr>
|
1842
|
-
<tr><td>move_after_transfer</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>(--move-after-transfer)</td></tr>
|
1843
|
-
<tr><td>multi_session</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Use multi-session transfer. max 128.<br/>
|
1844
|
-
<tr><td>multi_session_threshold</td><td>int</td><td>Y</td><td>Y</td><td> </td><td>Split files across multiple ascp sessions if their size in bytes is greater than or equal to the specified value
|
2030
|
+
<tr><td>move_after_transfer</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>The relative path to which the files will be moved after the transfer at the source side.<br/>(--move-after-transfer)</td></tr>
|
2031
|
+
<tr><td>multi_session</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Use multi-session transfer. max 128.<br/>Each participant on one host needs an independent UDP (-O) port.<br/>Large files are split between sessions only when transferring with resume_policy=none.<br/></td></tr>
|
2032
|
+
<tr><td>multi_session_threshold</td><td>int</td><td>Y</td><td>Y</td><td> </td><td>Split files across multiple ascp sessions if their size in bytes is greater than or equal to the specified value.<br/>(0=no file is split)<br/>(--multi-session-threshold)</td></tr>
|
1845
2033
|
<tr><td>overwrite</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Overwrite destination files with the source files of the same name.<br/>Allowed values: never, always, diff, older, diff+older<br/>(--overwrite)</td></tr>
|
2034
|
+
<tr><td>password</td><td>string</td><td> </td><td>Y</td><td> </td><td>Password for local Windows user when transfer user associated with node api user is not the same as the one running asperanoded.<br/>Allows impersonating the transfer user and have access to resources (e.g. network shares).<br/>Windows only, node api only.</td></tr>
|
1846
2035
|
<tr><td>paths</td><td>array</td><td>Y</td><td>Y</td><td>Y</td><td>Array of path to the source (required) and a path to the destination (optional).</td></tr>
|
1847
2036
|
<tr><td>precalculate_job_size</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies whether to precalculate the job size.<br/>(--precalculate-job-size)</td></tr>
|
1848
2037
|
<tr><td>preserve_access_time</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-access-time)</td></tr>
|
@@ -1854,7 +2043,7 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
|
|
1854
2043
|
<tr><td>preserve_remote_acls</td><td>string</td><td>Y</td><td> </td><td> </td><td>Preserve remote access control lists.<br/>Allowed values: none, native, metafile<br/>(--remote-preserve-acls)</td></tr>
|
1855
2044
|
<tr><td>preserve_source_access_time</td><td>bool</td><td>Y</td><td> </td><td> </td><td>Preserve the time logged for when the source file was accessed<br/>(--preserve-source-access-time)</td></tr>
|
1856
2045
|
<tr><td>preserve_times</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>(--preserve-times)</td></tr>
|
1857
|
-
<tr><td>proxy</td><td>string</td><td>Y</td><td> </td><td> </td><td>Specify the address of the Aspera high-speed proxy server.<br/>
|
2046
|
+
<tr><td>proxy</td><td>string</td><td>Y</td><td> </td><td> </td><td>Specify the address of the Aspera high-speed proxy server.<br/>dnat(s)://[user[:password]@]server:port<br/>Default ports for DNAT and DNATS protocols are 9091 and 9092.<br/>Password, if specified here, overrides the value of environment variable ASPERA_PROXY_PASS.<br/>(--proxy)</td></tr>
|
1858
2047
|
<tr><td>rate_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>The transfer rate policy to use when sharing bandwidth.<br/>Allowed values: low, fair, high, fixed<br/>(--policy)</td></tr>
|
1859
2048
|
<tr><td>rate_policy_allowed</td><td>string</td><td> </td><td> </td><td>Y</td><td>Specifies most aggressive rate policy that is allowed.<br/>Returned by node API.<br/>Allowed values: low, fair, high, fixed</td></tr>
|
1860
2049
|
<tr><td>remote_host</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>IP or fully qualified domain name of the remote server<br/>(--host)</td></tr>
|
@@ -1866,10 +2055,11 @@ Fields with EX_ prefix are extensions to transfer agent [`direct`](#agt_direct).
|
|
1866
2055
|
<tr><td>remove_skipped</td><td>bool</td><td>Y</td><td>Y</td><td>Y</td><td>Must also have remove_after_transfer set to true, Defaults to false, if true, skipped files will be removed as well.<br/>(--remove-skipped)</td></tr>
|
1867
2056
|
<tr><td>resume_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>If a transfer is interrupted or fails to finish, resume without re-transferring the whole files.<br/>Allowed values: none, attrs, sparse_csum, full_csum<br/>(-k)</td></tr>
|
1868
2057
|
<tr><td>retry_duration</td><td>string<br/>int</td><td> </td><td>Y</td><td>Y</td><td>Specifies how long to wait before retrying transfer. (e.g. "5min")</td></tr>
|
1869
|
-
<tr><td>source_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Path to be prepended to each source path.<br/>
|
2058
|
+
<tr><td>source_root</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Path to be prepended to each source path.<br/>This is either a conventional path or it can be a URI but only if there is no root defined.<br/>(--source-prefix64)</td></tr>
|
1870
2059
|
<tr><td>source_root_id</td><td>string</td><td> </td><td>Y</td><td> </td><td>The file ID of the source root directory. Required when using Bearer token auth for the source node.</td></tr>
|
2060
|
+
<tr><td>src_base</td><td>string</td><td>Y</td><td>Y</td><td> </td><td>Specify the prefix to be stripped off from each source object.<br/>The remaining portion of the source path is kept intact at the destination.<br/>Special care must be taken when used with cloud storage.<br/>(--src-base64)</td></tr>
|
1871
2061
|
<tr><td>ssh_port</td><td>int</td><td>Y</td><td>Y</td><td>Y</td><td>Specifies SSH (TCP) port. Default: local:22, other:33001<br/>(-P)</td></tr>
|
1872
|
-
<tr><td>ssh_private_key</td><td>string</td><td>Y</td><td> </td><td> </td><td>Private key used for SSH authentication.<br/>
|
2062
|
+
<tr><td>ssh_private_key</td><td>string</td><td>Y</td><td> </td><td> </td><td>Private key used for SSH authentication.<br/>Shall look like: -----BEGIN RSA PRIV4TE KEY-----\nMII...<br/>Note the JSON encoding: \n for newlines.<br/>(env:ASPERA_SCP_KEY)</td></tr>
|
1873
2063
|
<tr><td>ssh_private_key_passphrase</td><td>string</td><td>Y</td><td> </td><td> </td><td>The passphrase associated with the transfer user's SSH private key. Available as of 3.7.2.<br/>(env:ASPERA_SCP_PASS)</td></tr>
|
1874
2064
|
<tr><td>sshfp</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Check it against server SSH host key fingerprint<br/>(--check-sshfp)</td></tr>
|
1875
2065
|
<tr><td>symlink_policy</td><td>string</td><td>Y</td><td>Y</td><td>Y</td><td>Handle source side symbolic links<br/>Allowed values: follow, copy, copy+force, skip<br/>(--symbolic-links)</td></tr>
|
@@ -1896,89 +2086,98 @@ As such, it can be modified with option: `--ts=@json:'{"destination_root":"<path
|
|
1896
2086
|
The option `to_folder` provides an equivalent and convenient way to change this parameter:
|
1897
2087
|
`--to-folder=<path>` .
|
1898
2088
|
|
1899
|
-
#### List of files for transfers
|
2089
|
+
#### <a id="file_list"></a>List of files for transfers
|
1900
2090
|
|
1901
|
-
When uploading, downloading or sending files, the user must specify the list of files to transfer.
|
1902
|
-
So, by default, the list of files to transfer will be simply specified on the command line:
|
2091
|
+
When uploading, downloading or sending files, the user must specify the list of files to transfer.
|
1903
2092
|
|
1904
|
-
|
1905
|
-
ascli server upload ~/mysample.file secondfile
|
1906
|
-
```
|
2093
|
+
By default the list of files to transfer is simply provided on the command line.
|
1907
2094
|
|
1908
|
-
|
2095
|
+
The list of (source) files to transfer is specified by (extended value) option `sources` (default: `@args`).
|
2096
|
+
The list is either simply the list of source files, or a combined source/destination list (see below) depending on value of option `src_type` (default: `list`).
|
1909
2097
|
|
1910
|
-
|
1911
|
-
|
1912
|
-
|
2098
|
+
In `ascli`, all transfer parameters, including file list, are provided to the transfer agent in a [*transfer-spec*](#transferspec) so that execution of a transfer is independent of the transfer agent (direct, connect, node, transfer sdk...).
|
2099
|
+
So, eventually, the list of files to transfer is provided to the transfer agent using the [*transfer-spec*](#transferspec) field: `"paths"` which is a list (array) of pairs of `"source"` (mandatory) and `"destination"` (optional).
|
2100
|
+
The `sources` and `src_type` options provide convenient ways to populate the transfer spec with the source file list.
|
1913
2101
|
|
1914
|
-
|
2102
|
+
Possible values for option `sources` are:
|
1915
2103
|
|
1916
|
-
|
1917
|
-
|
2104
|
+
* `@args` : (default) the list of files (or file pair) is directly provided on the command line (after commands): unused arguments (not starting with `-`) are considered as source files.
|
2105
|
+
So, by default, the list of files to transfer will be simply specified on the command line. Example:
|
1918
2106
|
|
1919
|
-
|
2107
|
+
```bash
|
2108
|
+
ascli server upload ~/first.file secondfile
|
2109
|
+
```
|
1920
2110
|
|
1921
|
-
|
2111
|
+
This is the same as (with default values):
|
1922
2112
|
|
1923
|
-
|
2113
|
+
```bash
|
2114
|
+
ascli server upload --sources=@args --src-type=list ~/mysample.file secondfile
|
2115
|
+
```
|
1924
2116
|
|
1925
|
-
|
1926
|
-
--sources=@json:'["file1","file2"]'
|
1927
|
-
```
|
2117
|
+
* an [Extended Value](#extended) with type **Array of String**
|
1928
2118
|
|
1929
|
-
|
1930
|
-
--sources=@lines:@stdin:
|
1931
|
-
```
|
2119
|
+
> Note: extended values can be tested with the command `conf echo`
|
1932
2120
|
|
1933
|
-
|
1934
|
-
--sources=@ruby:'File.read("myfilelist").split("\n")'
|
1935
|
-
```
|
2121
|
+
Examples:
|
1936
2122
|
|
1937
|
-
*
|
2123
|
+
* Using extended value
|
1938
2124
|
|
1939
|
-
|
1940
|
-
--sources=@ts --ts=@json:'{"paths":[{"source":"file1"},{"source":"file2"}]}'
|
1941
|
-
```
|
2125
|
+
Create the file list:
|
1942
2126
|
|
1943
|
-
|
2127
|
+
```bash
|
2128
|
+
echo ~/mysample.file > myfilelist.txt
|
2129
|
+
echo secondfile >> myfilelist.txt
|
2130
|
+
```
|
1944
2131
|
|
1945
|
-
|
1946
|
-
... --sources=@ts --ts=@json:'{"paths":[],"EX_file_list":"filelist.txt"}'
|
1947
|
-
```
|
2132
|
+
Use the file list: one path per line:
|
1948
2133
|
|
1949
|
-
|
2134
|
+
```ruby
|
2135
|
+
--sources=@lines:@file:myfilelist.txt
|
2136
|
+
```
|
1950
2137
|
|
1951
|
-
|
1952
|
-
--sources=@ts --ts=@json:'{"paths":[{"source":"dummy"}],"EX_ascp_args":["--file-list","myfilelist"]}'
|
1953
|
-
```
|
2138
|
+
* Using JSON array
|
1954
2139
|
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
2140
|
+
```javascript
|
2141
|
+
--sources=@json:'["file1","file2"]'
|
2142
|
+
```
|
1958
2143
|
|
1959
|
-
|
2144
|
+
* Using STDIN, one path per line
|
1960
2145
|
|
1961
|
-
|
1962
|
-
|
2146
|
+
```bash
|
2147
|
+
--sources=@lines:@stdin:
|
2148
|
+
```
|
1963
2149
|
|
1964
|
-
|
2150
|
+
* Using ruby code (one path per line in file)
|
1965
2151
|
|
1966
|
-
```
|
1967
|
-
|
1968
|
-
```
|
2152
|
+
```ruby
|
2153
|
+
--sources=@ruby:'File.read("myfilelist.txt").split("\n")'
|
2154
|
+
```
|
1969
2155
|
|
1970
|
-
|
2156
|
+
* `@ts` : the user provides the list of files directly in the `paths` field of transfer spec (option `ts`).
|
2157
|
+
Examples:
|
1971
2158
|
|
1972
|
-
|
2159
|
+
* Using transfer spec
|
1973
2160
|
|
1974
|
-
|
1975
|
-
|
1976
|
-
|
2161
|
+
```javascript
|
2162
|
+
--sources=@ts --ts=@json:'{"paths":[{"source":"file1"},{"source":"file2"}]}'
|
2163
|
+
```
|
1977
2164
|
|
1978
|
-
|
2165
|
+
The option `src_type` allows specifying if the list specified in option `sources` is a simple file list or if it is a file pair list.
|
2166
|
+
|
2167
|
+
> Note: Option `src_type` is not used if option `sources` is set to `@ts`
|
2168
|
+
|
2169
|
+
Supported values for `src_type` are:
|
1979
2170
|
|
1980
|
-
* the
|
1981
|
-
* the
|
2171
|
+
* `list` : (default) the path of destination is the same as source and each entry is a source file path
|
2172
|
+
* `pair` : the first element is the first source, the second element is the first destination, and so on.
|
2173
|
+
|
2174
|
+
Example: Source file `200KB.1` is renamed `sample1` on destination:
|
2175
|
+
|
2176
|
+
```bash
|
2177
|
+
ascli server upload --src-type=pair ~/Documents/Samples/200KB.1 /Upload/sample1
|
2178
|
+
```
|
2179
|
+
|
2180
|
+
> Note there are some specific rules to specify file list when using "Aspera on Cloud", refer to the AoC plugin section.
|
1982
2181
|
|
1983
2182
|
#### <a id="multisession"></a>Support of multi-session
|
1984
2183
|
|
@@ -2018,13 +2217,13 @@ activating CSEAR consists in using transfer spec parameters:
|
|
2018
2217
|
|
2019
2218
|
Example: parameter to download a faspex package and decrypt on the fly
|
2020
2219
|
|
2021
|
-
```
|
2220
|
+
```javascript
|
2022
2221
|
--ts=@json:'{"content_protection":"decrypt","content_protection_password":"_pass_here_"}'
|
2023
2222
|
```
|
2024
2223
|
|
2025
2224
|
Note that up to version 4.6.0, the following parameters should be used for agent `direct`:
|
2026
2225
|
|
2027
|
-
```
|
2226
|
+
```javascript
|
2028
2227
|
--ts=@json:'{"EX_ascp_args":["--file-crypt=decrypt"],"EX_at_rest_password":"_secret_here_"}'
|
2029
2228
|
```
|
2030
2229
|
|
@@ -2216,7 +2415,7 @@ ascli server upload "faux:///mydir?file=testfile&count=1m&size=0&inc=2&seq=seque
|
|
2216
2415
|
```text
|
2217
2416
|
ascli -h
|
2218
2417
|
NAME
|
2219
|
-
ascli -- a command line tool for Aspera Applications (v4.
|
2418
|
+
ascli -- a command line tool for Aspera Applications (v4.9.0)
|
2220
2419
|
|
2221
2420
|
SYNOPSIS
|
2222
2421
|
ascli COMMANDS [OPTIONS] [ARGS]
|
@@ -2248,7 +2447,7 @@ ARGS
|
|
2248
2447
|
OPTIONS: global
|
2249
2448
|
--interactive=ENUM use interactive input of missing params: yes, [no]
|
2250
2449
|
--ask-options=ENUM ask even optional options: yes, [no]
|
2251
|
-
--format=ENUM output format:
|
2450
|
+
--format=ENUM output format: text, nagios, ruby, json, jsonpp, yaml, [table], csv
|
2252
2451
|
--display=ENUM output only some information: [info], data, error
|
2253
2452
|
--fields=VALUE comma separated list of fields, or ALL, or DEF
|
2254
2453
|
--select=VALUE select only some items in lists, extended value: hash (column, value)
|
@@ -2279,6 +2478,7 @@ OPTIONS:
|
|
2279
2478
|
--value=VALUE extended value for create, update, list filter
|
2280
2479
|
--property=VALUE name of property to set
|
2281
2480
|
--id=VALUE resource identifier (modify,delete,show)
|
2481
|
+
--bulk=ENUM Bulk operation (only some): yes, [no]
|
2282
2482
|
--config-file=VALUE read parameters from file in YAML format, current=/usershome/.aspera/ascli/config.yaml
|
2283
2483
|
-N, --no-default do not load default configuration for plugin
|
2284
2484
|
--override=ENUM Wizard: override existing value: yes, [no]
|
@@ -2301,11 +2501,11 @@ OPTIONS:
|
|
2301
2501
|
--plugin-folder=VALUE folder where to find additional plugins
|
2302
2502
|
--ts=VALUE override transfer spec values (Hash, use @json: prefix), current={"create_dir"=>true}
|
2303
2503
|
--local-resume=VALUE set resume policy (Hash, use @json: prefix), current=
|
2304
|
-
--to-folder=VALUE destination folder for
|
2305
|
-
--sources=VALUE list of
|
2306
|
-
--transfer-info=VALUE parameters for transfer agent
|
2504
|
+
--to-folder=VALUE destination folder for transfered files
|
2505
|
+
--sources=VALUE how list of transfered files is provided (@args,@ts,Array)
|
2307
2506
|
--src-type=ENUM type of file list: list, pair
|
2308
2507
|
--transfer=ENUM type of transfer agent: direct, node, connect, httpgw, trsdk
|
2508
|
+
--transfer-info=VALUE parameters for transfer agent
|
2309
2509
|
--progress=ENUM type of progress bar: none, native, multi
|
2310
2510
|
|
2311
2511
|
|
@@ -2469,23 +2669,21 @@ OPTIONS:
|
|
2469
2669
|
--name=VALUE resource name
|
2470
2670
|
--path=VALUE file or folder path
|
2471
2671
|
--link=VALUE public link to shared resource
|
2472
|
-
--new-user-option=VALUE new user creation option
|
2672
|
+
--new-user-option=VALUE new user creation option for unknown package recipients
|
2473
2673
|
--from-folder=VALUE share to share source folder
|
2474
2674
|
--scope=VALUE OAuth scope for AoC API calls
|
2475
|
-
--bulk=ENUM bulk operation: yes, [no]
|
2476
2675
|
--default-ports=ENUM use standard FASP ports or get from node api: yes, [no]
|
2477
2676
|
--validate-metadata=ENUM validate shared inbox metadata: yes, [no]
|
2478
2677
|
|
2479
2678
|
|
2480
2679
|
COMMAND: server
|
2481
|
-
SUBCOMMANDS: health
|
2680
|
+
SUBCOMMANDS: health download upload browse delete rename ls rm mv du info mkdir cp df md5sum
|
2482
2681
|
OPTIONS:
|
2483
2682
|
--url=VALUE URL of application, e.g. https://org.asperafiles.com
|
2484
2683
|
--username=VALUE username to log in
|
2485
2684
|
--password=VALUE user's password
|
2486
|
-
--ssh-keys=VALUE
|
2487
|
-
--ssh-options=VALUE
|
2488
|
-
--cmd-prefix=VALUE prefix to add for as cmd execution, e.g. sudo or /opt/aspera/bin
|
2685
|
+
--ssh-keys=VALUE SSH key path list (Array or single)
|
2686
|
+
--ssh-options=VALUE SSH options (Hash)
|
2489
2687
|
|
2490
2688
|
|
2491
2689
|
COMMAND: console
|
@@ -2502,6 +2700,12 @@ OPTIONS:
|
|
2502
2700
|
|
2503
2701
|
Note that actions and parameter values can be written in short form.
|
2504
2702
|
|
2703
|
+
### Bulk creation and deletion of resources
|
2704
|
+
|
2705
|
+
Bulk creation and deletion of resources are possible using option `bulk` (yes,no(default)).
|
2706
|
+
In that case, the operation expects an Array of Hash instead of a simple Hash using the [Extended Value Syntax](#extended).
|
2707
|
+
This option is available only for some of the resources: if you need it: try and see if the entities you try to create or delete support this option.
|
2708
|
+
|
2505
2709
|
## <a id="aoc"></a>Plugin: Aspera on Cloud
|
2506
2710
|
|
2507
2711
|
Aspera on Cloud uses the more advanced Oauth v2 mechanism for authentication (HTTP Basic authentication is not supported).
|
@@ -2545,7 +2749,7 @@ ascli config wizard --value=aoc
|
|
2545
2749
|
|
2546
2750
|
### <a id="aocmanual"></a>Configuration: using manual setup
|
2547
2751
|
|
2548
|
-
If you used the wizard (recommended): skip this section.
|
2752
|
+
> If you used the wizard (recommended): skip this section.
|
2549
2753
|
|
2550
2754
|
#### Configuration details
|
2551
2755
|
|
@@ -2706,7 +2910,7 @@ Execute:
|
|
2706
2910
|
ascli config preset update my_aoc_org --auth=jwt --private-key=@val:@file:~/.aspera/ascli/my_private_key --username=laurent.martin.aspera@fr.ibm.com
|
2707
2911
|
```
|
2708
2912
|
|
2709
|
-
Note: the private key argument represents the actual PEM string. In order to read the content from a file, use the
|
2913
|
+
Note: the private key argument represents the actual PEM string. In order to read the content from a file, use the `@file:` prefix. But if the @file: argument is used as is, it will read the file and set in the config file. So to keep the "@file" tag in the configuration file, the `@val:` prefix is added.
|
2710
2914
|
|
2711
2915
|
After this last step, commands do not require web login anymore.
|
2712
2916
|
|
@@ -2750,11 +2954,6 @@ The `admin` command allows several administrative tasks (and require admin privi
|
|
2750
2954
|
|
2751
2955
|
It allows actions (create, update, delete) on "resources": users, group, nodes, workspace, etc... with the `admin resource` command.
|
2752
2956
|
|
2753
|
-
#### Bulk creation and deletion of resource
|
2754
|
-
|
2755
|
-
Bulk creation and deletion of resources are possible using option `bulk` (yes,no(default)).
|
2756
|
-
In that case, the operation expects an Array of Hash instead of a simple Hash using the [Extended Value Syntax](#extended).
|
2757
|
-
|
2758
2957
|
#### Listing resources
|
2759
2958
|
|
2760
2959
|
The command `aoc admin res <type> list` lists all entities of given type. It uses paging and multiple requests if necessary.
|
@@ -3053,7 +3252,7 @@ ascli aoc admin res workspace_membership list --fields=member_type,manager,membe
|
|
3053
3252
|
:.............:.........:..................................:
|
3054
3253
|
```
|
3055
3254
|
|
3056
|
-
|
3255
|
+
Other query parameters:
|
3057
3256
|
|
3058
3257
|
```javascript
|
3059
3258
|
{"workspace_membership_through":true,"include_indirect":true}
|
@@ -3227,40 +3426,64 @@ ascli aoc admin res client list --fields=id --format=csv|ascli aoc admin res cli
|
|
3227
3426
|
+-----+---------+
|
3228
3427
|
```
|
3229
3428
|
|
3230
|
-
#### Example: Create a
|
3429
|
+
#### Example: Create a Node
|
3231
3430
|
|
3232
3431
|
AoC nodes as actually composed with two related entities:
|
3233
3432
|
|
3234
3433
|
* An access key created on the Transfer Server (HSTS/ATS)
|
3235
3434
|
* a `node` resource in the AoC application.
|
3236
3435
|
|
3237
|
-
The web UI allows creation of both entities in one shot
|
3238
|
-
|
3436
|
+
The web UI allows creation of both entities in one shot.
|
3437
|
+
For more flexibility, `ascli` allows this in two separate steps.
|
3438
|
+
Note that when selecting "Use existing access key" in the web UI, this actually skips access key creation (first step).
|
3239
3439
|
|
3240
3440
|
So, for example, the creation of a node using ATS in IBM Cloud looks like (see other example in this manual):
|
3241
3441
|
|
3242
|
-
*
|
3442
|
+
* Create the access key on ATS
|
3243
3443
|
|
3244
|
-
|
3245
|
-
ascli aoc admin ats access_key create --cloud=softlayer --region=eu-de --params=@json:'{"storage":{"type":"ibm-s3","bucket":"mybucket","credentials":{"access_key_id":"mykey","secret_access_key":"mysecret"},"path":"/"}}'
|
3246
|
-
```
|
3444
|
+
The creation options are the ones of ATS API, refer to the [section on ATS](#ats_params) for more details and examples.
|
3247
3445
|
|
3248
|
-
|
3446
|
+
```javascript
|
3447
|
+
ascli aoc admin ats access_key create --cloud=softlayer --region=eu-de --params=@json:'{"storage":{"type":"ibm-s3","bucket":"mybucket","credentials":{"access_key_id":"mykey","secret_access_key":"mysecret"},"path":"/"}}'
|
3448
|
+
```
|
3249
3449
|
|
3250
|
-
|
3450
|
+
Once executed, the access key `id` and `secret`, randomly generated by the node api, is displayed: take note of it as the secrets will not be disclosed again.
|
3251
3451
|
|
3252
|
-
|
3253
|
-
ascli aoc admin ats cluster show --cloud=softlayer --region=eu-de --fields=transfer_setup_url --format=csv --transpose-single=no
|
3254
|
-
```
|
3452
|
+
* Create the AoC node entity
|
3255
3453
|
|
3256
|
-
|
3454
|
+
First, Retrieve the ATS node address
|
3257
3455
|
|
3258
|
-
```
|
3259
|
-
ascli aoc admin
|
3260
|
-
```
|
3456
|
+
```bash
|
3457
|
+
ascli aoc admin ats cluster show --cloud=softlayer --region=eu-de --fields=transfer_setup_url --format=csv --transpose-single=no
|
3458
|
+
```
|
3459
|
+
|
3460
|
+
Then use the returned address for the `url` key to actually create the AoC Node entity:
|
3461
|
+
|
3462
|
+
```javascript
|
3463
|
+
ascli aoc admin res node create @json:'{"name":"myname","access_key":"*accesskeyid*","ats_access_key":true,"ats_storage_type":"ibm-s3","url":"https://ats-sl-fra-all.aspera.io"}'
|
3464
|
+
```
|
3261
3465
|
|
3262
3466
|
Creation of a node with a self-managed node is similar, but the command `aoc admin ats access_key create` is replaced with `node access_key create` on the private node itself.
|
3263
3467
|
|
3468
|
+
### List of files to transfer
|
3469
|
+
|
3470
|
+
Source files are provided as a list with the `sources` option. Refer to section [File list](#file_list)
|
3471
|
+
|
3472
|
+
Note the special case when the source files are located on "Aspera on Cloud" (i.e. using access keys and the `file id` API).
|
3473
|
+
|
3474
|
+
Source files are located on "Aspera on cloud", when :
|
3475
|
+
|
3476
|
+
* the server is Aspera on Cloud, and executing a download or recv
|
3477
|
+
* the agent is Aspera on Cloud, and executing an upload or send
|
3478
|
+
|
3479
|
+
In this case:
|
3480
|
+
|
3481
|
+
* If there is a single file : specify the full path
|
3482
|
+
* Else, if there are multiple files:
|
3483
|
+
* All source files must be in the same source folder
|
3484
|
+
* Specify the source folder as first item in the list
|
3485
|
+
* followed by the list of file names.
|
3486
|
+
|
3264
3487
|
### Packages
|
3265
3488
|
|
3266
3489
|
The webmail-like application.
|
@@ -3328,6 +3551,31 @@ shbxid=$(ascli aoc packages shared_inboxes show name 'My Shared Inbox' --format=
|
|
3328
3551
|
ascli aoc packages list --query=@json:'{"dropbox_id":"'$shbxid'","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false,"include_draft":false,"sort":"-received_at"}'
|
3329
3552
|
```
|
3330
3553
|
|
3554
|
+
#### Example: Send a package with files from the Files app
|
3555
|
+
|
3556
|
+
Find files in Files app:
|
3557
|
+
|
3558
|
+
```bash
|
3559
|
+
ascli aoc files browse /src_folder
|
3560
|
+
```
|
3561
|
+
|
3562
|
+
```bash
|
3563
|
+
+------------------------------+--------+----------------+--------------+----------------------+--------------+
|
3564
|
+
| name | type | recursive_size | size | modified_time | access_level |
|
3565
|
+
+------------------------------+--------+----------------+--------------+----------------------+--------------+
|
3566
|
+
| sample_video | link | | | 2020-11-29T22:49:09Z | edit |
|
3567
|
+
| 100G | file | | 107374182400 | 2021-04-21T18:19:25Z | edit |
|
3568
|
+
| 10M.dat | file | | 10485760 | 2021-05-18T08:22:39Z | edit |
|
3569
|
+
| Test.pdf | file | | 1265103 | 2022-06-16T12:49:55Z | edit |
|
3570
|
+
+------------------------------+--------+----------------+--------------+----------------------+--------------+
|
3571
|
+
```
|
3572
|
+
|
3573
|
+
Let's send a package with the file `10M.dat` from subfolder /src_folder in a package:
|
3574
|
+
|
3575
|
+
```bash
|
3576
|
+
ascli aoc files node_info /src_folder --format=json --display=data | ascli aoc package send --value=@json:'{"name":"test","recipients":["laurent.martin.aspera@fr.ibm.com"]}' 10M.dat --transfer=node --transfer-info=@json:@stdin:
|
3577
|
+
```
|
3578
|
+
|
3331
3579
|
#### <a id="aoccargo"></a>Receive new packages only (Cargo)
|
3332
3580
|
|
3333
3581
|
It is possible to automatically download new packages, like using Aspera Cargo:
|
@@ -3352,26 +3600,47 @@ Folder sharing app.
|
|
3352
3600
|
|
3353
3601
|
#### Download Files
|
3354
3602
|
|
3355
|
-
Download of files is straightforward
|
3356
|
-
|
3357
|
-
* if only one source is provided, it is downloaded
|
3358
|
-
* if multiple sources must be downloaded, then the first in list is the path of the source folder, and the remaining items are the file names in this folder (without path).
|
3603
|
+
Download of files is straightforward using command: `aoc files download`
|
3359
3604
|
|
3360
3605
|
#### Shared folders
|
3361
3606
|
|
3362
|
-
|
3607
|
+
Shared folder by users are managed through **permissions**.
|
3608
|
+
For creation, parameters are the same as for node api [permissions](https://developer.ibm.com/apis/catalog/aspera--aspera-node-api/api/API--aspera--node-api#post960739960).
|
3609
|
+
`ascli` expects the same payload for creation, but it will automatically populated required tags if needed.
|
3610
|
+
Also, the pseudo key `with` is added: it will lookup the name in the contacts and fill the proper type and id.
|
3611
|
+
The pseudo parameter `link_name` allows changing default "shared as" name.
|
3612
|
+
|
3613
|
+
* List permissions on a shared folder as user
|
3614
|
+
|
3615
|
+
```bash
|
3616
|
+
ascli aoc files file --path=/shared_folder_test1 perm list
|
3617
|
+
```
|
3618
|
+
|
3619
|
+
* Share a personal folder with other users
|
3620
|
+
|
3621
|
+
```bash
|
3622
|
+
ascli aoc files file --path=/shared_folder_test1 perm create @json:'{"with":"laurent"}'
|
3623
|
+
```
|
3624
|
+
|
3625
|
+
* Revoke shared access
|
3626
|
+
|
3627
|
+
```bash
|
3628
|
+
ascli aoc files file --path=/shared_folder_test1 perm delete 6161
|
3629
|
+
```
|
3630
|
+
|
3631
|
+
* List shared folders in node
|
3363
3632
|
|
3364
3633
|
```bash
|
3365
3634
|
ascli aoc admin res node --id=8669 shared_folders
|
3366
3635
|
```
|
3367
3636
|
|
3368
|
-
*
|
3637
|
+
* List shared folders in workspace
|
3369
3638
|
|
3370
3639
|
```bash
|
3371
3640
|
ascli aoc admin res workspace --id=10818 shared_folders
|
3372
3641
|
```
|
3373
3642
|
|
3374
|
-
*
|
3643
|
+
* List members of shared folder
|
3375
3644
|
|
3376
3645
|
```bash
|
3377
3646
|
ascli aoc admin res node --id=8669 v4 perm 82 show
|
@@ -3503,6 +3772,8 @@ aoc files browse /
|
|
3503
3772
|
aoc files browse / -N --link=my_aoc_publink_folder
|
3504
3773
|
aoc files delete /testsrc
|
3505
3774
|
aoc files download --transfer=connect /200KB.1
|
3775
|
+
aoc files file permission --path=/ascli_test list
|
3776
|
+
aoc files file show --path=/200KB.1
|
3506
3777
|
aoc files file show my_file_id
|
3507
3778
|
aoc files find / --value='\.partial$'
|
3508
3779
|
aoc files http_node_download --to-folder=. /200KB.1
|
@@ -3518,6 +3789,7 @@ aoc files upload Test.pdf --transfer=node --transfer-info=@json:@stdin:
|
|
3518
3789
|
aoc files v3 info
|
3519
3790
|
aoc org -N --link=my_aoc_publink_recv_from_aocuser
|
3520
3791
|
aoc organization
|
3792
|
+
aoc packages browse "my_package_id" /contents
|
3521
3793
|
aoc packages list
|
3522
3794
|
aoc packages list --query=@json:'{"dropbox_name":"my_aoc_shbx_name","sort":"-received_at","archived":false,"received":true,"has_content":true,"exclude_dropbox_packages":false}'
|
3523
3795
|
aoc packages recv "my_package_id" --to-folder=.
|
@@ -3614,6 +3886,10 @@ ascli ats api_key create
|
|
3614
3886
|
ascli config preset update my_ibm_ats --ats-key=ats_XXXXXXXXXXXXXXXXXXXXXXXX --ats-secret=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
|
3615
3887
|
```
|
3616
3888
|
|
3889
|
+
### <a id="ats_params"></a>ATS Access key creation parameters
|
3890
|
+
|
3891
|
+
When creating an ATS access key, the option `params` must contain an extended value with the creation parameters. Those asre directly the parameters expected by the [ATS API](https://developer.ibm.com/apis/catalog?search=%22Aspera%20ATS%20API%22).
|
3892
|
+
|
3617
3893
|
### Misc. Examples
|
3618
3894
|
|
3619
3895
|
Example: create access key on IBM Cloud (softlayer):
|
@@ -3678,11 +3954,6 @@ Modern mode is to use the node API and transfer tokens.
|
|
3678
3954
|
### Server sample commands
|
3679
3955
|
|
3680
3956
|
```bash
|
3681
|
-
server -N -Ptst_hstsfaspex_ssh -Plocal_user configurator get_node_data
|
3682
|
-
server -N -Ptst_hstsfaspex_ssh -Plocal_user ctl all:status
|
3683
|
-
server -N -Ptst_hstsfaspex_ssh -Plocal_user health app_services --format=nagios
|
3684
|
-
server -N -Ptst_hstsfaspex_ssh -Plocal_user health asctlstatus --format=nagios --cmd-prefix='sudo '
|
3685
|
-
server -N -Ptst_hstsfaspex_ssh -Plocal_user nodeadmin -- -l
|
3686
3957
|
server -N -Ptst_server_bykey -Plocal_user br /
|
3687
3958
|
server browse /
|
3688
3959
|
server browse folder_1/target_hot
|
@@ -3700,6 +3971,10 @@ server md5sum NEW_SERVER_FOLDER/testfile.bin
|
|
3700
3971
|
server mkdir NEW_SERVER_FOLDER --logger=stdout
|
3701
3972
|
server mkdir folder_1/target_hot
|
3702
3973
|
server mv folder_1/200KB.2 folder_1/to.delete
|
3974
|
+
server upload --sources=@ts --ts=@json:'{"EX_ascp_args":["--file-list","'"filelist.txt"'"]}' --to-folder=NEW_SERVER_FOLDER
|
3975
|
+
server upload --sources=@ts --ts=@json:'{"EX_ascp_args":["--file-pair-list","'"filepairlist.txt"'"]}'
|
3976
|
+
server upload --sources=@ts --ts=@json:'{"EX_file_list":"'"filelist.txt"'"}' --to-folder=NEW_SERVER_FOLDER
|
3977
|
+
server upload --sources=@ts --ts=@json:'{"EX_file_pair_list":"'"filepairlist.txt"'"}'
|
3703
3978
|
server upload --sources=@ts --ts=@json:'{"paths":[{"source":"testfile.bin","destination":"NEW_SERVER_FOLDER/othername"}]}'
|
3704
3979
|
server upload --src-type=pair --sources=@json:'["testfile.bin","NEW_SERVER_FOLDER/othername"]'
|
3705
3980
|
server upload --src-type=pair testfile.bin NEW_SERVER_FOLDER/othername --notif-to=my_recipient_email
|
@@ -3708,7 +3983,7 @@ server upload --to-folder=folder_1/target_hot --lock-port=12345 --ts=@json:'{"EX
|
|
3708
3983
|
server upload testfile.bin --to-folder=NEW_SERVER_FOLDER --ts=@json:'{"multi_session":3,"multi_session_threshold":1,"resume_policy":"none","target_rate_kbps":1500}' --transfer-info=@json:'{"spawn_delay_sec":2.5}' --progress=multi
|
3709
3984
|
```
|
3710
3985
|
|
3711
|
-
### Authentication
|
3986
|
+
### Authentication on Server with SSH session
|
3712
3987
|
|
3713
3988
|
If SSH is the session control protocol (i.e. not WSS), then following session authentication methods are supported:
|
3714
3989
|
|
@@ -3723,8 +3998,10 @@ If no SSH password or key is provided and a transfer token is provided in transf
|
|
3723
3998
|
ascli server --url=ssh://... --ts=@json:'{"token":"Basic abc123"}'
|
3724
3999
|
```
|
3725
4000
|
|
3726
|
-
|
3727
|
-
|
4001
|
+
> Note: If you need to use the Aspera public keys, then specify an empty token: `--ts=@json:'{"token":""}'` : Aspera public SSH keys will be used, but the protocol will ignore the empty token.
|
4002
|
+
|
4003
|
+
The value of the `ssh_keys` option can be a single value or an array.
|
4004
|
+
Each value is a **path** to a private key and is expanded (`~` is replaced with the user's home folder).
|
3728
4005
|
|
3729
4006
|
Examples:
|
3730
4007
|
|
@@ -3734,8 +4011,10 @@ ascli server --ssh-keys=@list:,~/.ssh/id_rsa
|
|
3734
4011
|
ascli server --ssh-keys=@json:'["~/.ssh/id_rsa"]'
|
3735
4012
|
```
|
3736
4013
|
|
3737
|
-
|
3738
|
-
|
4014
|
+
For non-transfer related command (browse, delete), the ruby SSH client library `Net::SSH` is used and provides several options settable using option `ssh_options`.
|
4015
|
+
For a list of SSH client options, refer to the ruby documentation of [Net::SSH](http://net-ssh.github.io/net-ssh/Net/SSH.html).
|
4016
|
+
|
4017
|
+
By default the SSH library expect that a local ssh-agent is running.
|
3739
4018
|
|
3740
4019
|
On Linux, if you get an error message such as:
|
3741
4020
|
|
@@ -3749,12 +4028,12 @@ or on Windows:
|
|
3749
4028
|
ERROR -- net.ssh.authentication.agent: could not connect to ssh-agent: pageant process not running
|
3750
4029
|
```
|
3751
4030
|
|
3752
|
-
This means that you don't have such an
|
4031
|
+
This means that you don't have such an SSH agent running, then:
|
3753
4032
|
|
3754
4033
|
* check env var: `SSH_AGENT_SOCK`
|
3755
|
-
* check if the
|
4034
|
+
* check if the SSH key is protected with a passphrase (then, use the `passphrase` SSH option)
|
3756
4035
|
* [check the manual](https://net-ssh.github.io/ssh/v1/chapter-2.html#s2)
|
3757
|
-
* To disable use of `ssh-agent`, use the option `
|
4036
|
+
* To disable the use of `ssh-agent`, use the option `ssh_options` like this:
|
3758
4037
|
|
3759
4038
|
```bash
|
3760
4039
|
ascli server --ssh-options=@ruby:'{use_agent: false}' ...
|
@@ -3891,7 +4170,7 @@ ascli node access_key create --value=@json:'{"id":"eudemo-sedemo","secret":"myst
|
|
3891
4170
|
```bash
|
3892
4171
|
node -N -Ptst_node_preview access_key create --value=@json:'{"id":"aoc_1","storage":{"type":"local","path":"/"}}'
|
3893
4172
|
node -N -Ptst_node_preview access_key delete aoc_1
|
3894
|
-
node access_key do my_aoc_ak_name br
|
4173
|
+
node access_key do my_aoc_ak_name br /
|
3895
4174
|
node access_key list
|
3896
4175
|
node api_details
|
3897
4176
|
node async bandwidth 1
|
@@ -4022,19 +4301,19 @@ faspex5 package send --value=@json:'{"title":"test title","recipients":[{"name":
|
|
4022
4301
|
|
4023
4302
|
* List all shared inboxes
|
4024
4303
|
|
4025
|
-
```
|
4304
|
+
```javascript
|
4026
4305
|
ascli faspex5 admin res shared list --value=@json:'{"all":true}' --fields=id,name
|
4027
4306
|
```
|
4028
4307
|
|
4029
4308
|
* Create Metadata profile
|
4030
4309
|
|
4031
|
-
```
|
4310
|
+
```javascript
|
4032
4311
|
ascli faspex5 admin res metadata_profiles create --value=@json:'{"name":"the profile","default":false,"title":{"max_length":200,"illegal_chars":[]},"note":{"max_length":400,"illegal_chars":[],"enabled":false},"fields":[{"ordering":0,"name":"field1","type":"text_area","require":true,"illegal_chars":[],"max_length":100},{"ordering":1,"name":"fff2","type":"option_list","require":false,"choices":["opt1","opt2"]}]}'
|
4033
4312
|
```
|
4034
4313
|
|
4035
4314
|
* Create a Shared inbox with specific metadata profile
|
4036
4315
|
|
4037
|
-
```
|
4316
|
+
```javascript
|
4038
4317
|
ascli faspex5 admin res shared create --value=@json:'{"name":"the shared inbox","metadata_profile_id":1}'
|
4039
4318
|
```
|
4040
4319
|
|
@@ -4108,7 +4387,8 @@ if `id` is set to `ALL`, then all packages are downloaded, and if option `once_o
|
|
4108
4387
|
|
4109
4388
|
### Sending a Package
|
4110
4389
|
|
4111
|
-
The command is `faspex package send`. Package information (title, note, metadata, options) is provided in option `delivery_info`.
|
4390
|
+
The command is `faspex package send`. Package information (title, note, metadata, options) is provided in option `delivery_info`.
|
4391
|
+
The contents of `delivery_info` is directly the contents of the `send` v3 [API of Faspex 4](https://developer.ibm.com/apis/catalog/aspera--aspera-faspex-client-sdk/API%20v.3:%20Send%20Packages), consult it for extended supported parameters.
|
4112
4392
|
|
4113
4393
|
Example:
|
4114
4394
|
|
@@ -4795,8 +5075,7 @@ Transfer is: <%=global_transfer_status%>
|
|
4795
5075
|
|
4796
5076
|
## Tool: `asession`
|
4797
5077
|
|
4798
|
-
This gem comes with a second executable tool providing a simplified standardized interface
|
4799
|
-
to start a FASP session: `asession`.
|
5078
|
+
This gem comes with a second executable tool providing a simplified standardized interface to start a FASP session: `asession`.
|
4800
5079
|
|
4801
5080
|
It aims at simplifying the startup of a FASP session from a programmatic stand point as formatting a [*transfer-spec*](#transferspec) is:
|
4802
5081
|
|
@@ -4810,7 +5089,7 @@ This makes it easy to integrate with any language provided that one can spawn a
|
|
4810
5089
|
|
4811
5090
|
The tool expect one single argument: a [*transfer-spec*](#transferspec).
|
4812
5091
|
|
4813
|
-
If
|
5092
|
+
If no argument is provided, it assumes a value of: `@json:@stdin:`, i.e. a JSON formatted [*transfer-spec*](#transferspec) on stdin.
|
4814
5093
|
|
4815
5094
|
Note that if JSON is the format, one has to specify `@json:` to tell the tool to decode the hash using JSON.
|
4816
5095
|
|
@@ -4827,18 +5106,24 @@ Note that in addition, many "EX_" [*transfer-spec*](#transferspec) parameters ar
|
|
4827
5106
|
|
4828
5107
|
<table>
|
4829
5108
|
<tr><th>feature/tool</th><th>asession</th><th>ascp</th><th>FaspManager</th><th>Transfer SDK</th></tr>
|
4830
|
-
<tr><td>language integration</td><td>any</td><td>any</td><td>C/C++<br/>C#/.net<br/>Go<br/>Python<br/>java<br/></td><td>
|
4831
|
-
<tr><td>additional components to ascp</td><td>Ruby<br/>Aspera</td><td>-</td><td>library<br/>(headers)</td><td>daemon</td></tr>
|
5109
|
+
<tr><td>language integration</td><td>any</td><td>any</td><td>C/C++<br/>C#/.net<br/>Go<br/>Python<br/>java<br/></td><td>many</td></tr>
|
5110
|
+
<tr><td>required additional components to ascp</td><td>Ruby<br/>Aspera</td><td>-</td><td>library<br/>(headers)</td><td>daemon</td></tr>
|
4832
5111
|
<tr><td>startup</td><td>JSON on stdin<br/>(standard APIs:<br/>JSON.generate<br/>Process.spawn)</td><td>command line arguments</td><td>API</td><td>daemon</td></tr>
|
4833
5112
|
<tr><td>events</td><td>JSON on stdout</td><td>none by default<br/>or need to open management port<br/>and proprietary text syntax</td><td>callback</td><td>callback</td></tr>
|
4834
|
-
<tr><td>platforms</td><td>any with ruby and ascp</td><td>any with ascp</td><td>any with ascp</td><td>any with ascp and
|
5113
|
+
<tr><td>platforms</td><td>any with ruby and ascp</td><td>any with ascp (and SDK if compiled)</td><td>any with ascp</td><td>any with ascp and transfer daemon</td></tr></table>
|
4835
5114
|
|
4836
5115
|
### Simple session
|
4837
5116
|
|
4838
|
-
|
4839
|
-
|
5117
|
+
Create a file `session.json` with:
|
5118
|
+
|
5119
|
+
```json
|
5120
|
+
{"remote_host":"demo.asperasoft.com","remote_user":"asperaweb","ssh_port":33001,"remote_password":"_pass_here_","direction":"receive","destination_root":"./test.dir","paths":[{"source":"/aspera-test-dir-tiny/200KB.1"}],"resume_level":"none"}
|
5121
|
+
````
|
5122
|
+
|
5123
|
+
Then start the session:
|
4840
5124
|
|
4841
|
-
|
5125
|
+
```
|
5126
|
+
asession < session.json
|
4842
5127
|
```
|
4843
5128
|
|
4844
5129
|
### Asynchronous commands and Persistent session
|
@@ -5043,7 +5328,7 @@ Cause: `ascp` >= 4.x checks fingerprint of highest server host key, including EC
|
|
5043
5328
|
|
5044
5329
|
Workaround on client side: To ignore the certificate (SSH fingerprint) add option on client side (this option can also be added permanently to the config file):
|
5045
5330
|
|
5046
|
-
```
|
5331
|
+
```javascript
|
5047
5332
|
--ts=@json:'{"sshfp":null}'
|
5048
5333
|
```
|
5049
5334
|
|